especificação x implementação - JPA e JSF

Boa noite pessoal,

Pelo que li em alguns lugares o JPA é uma especificação e o Hibernate é a implementação dessa especificação, assim como o Toplink que seria uma implementação de referência.

1-Quando dizemos especificação JPA, seria um documento que informa o que deve ter em uma implementação referente a ORM? Onde posso ler esse documento?
2-Quando uso o Hibernate por exemplo estou usando necessariamente o JPA já que o Hibernate implementa a JPA?
3-A implementação de referência seria uma implementação modelo para outros se basearem e criarem outras implementações?

Tenho as mesmas dúvidas com relação a JSF.

4-JSF é a especificação e o Primefaces por exemplo é a implementação? Quando uso Primefaces estou usando JSF?
5-Onde consigo ver a especificação do JSF?
6-Li que o JSF tem uma implementação de referência também. Essa implementação de referência se chama JSF? Então a implementação JSF implementa a especificação JSF?

7-Tanto a especificação JPA quanto a JSF estão dentro da plataforma Java EE, correto?

Bom, essas são minhas duvidas a princípio. Dúvidas mais conceituais. Agradeço desde já.

valeu!

  1. http://jcp.org/aboutJava/communityprocess/final/jsr317/

  2. Não exatamente, porque você pode usar o Hibernate sem acessá-lo pelas APIs de JPA. (O Hibernate apareceu ANTES do JPA. )
    Pense no JPA como uma “interface”, no Hibernate como uma “classe” e nas APIs clássicas (não-JPA) do Hibernate como se fosse uma “outra interface”.
    Eu diria que você só estará usando JPA quando estiver usando o Hibernate via interface JPA.

  3. É.

  4. http://jcp.org/aboutJava/communityprocess/final/jsr314/

  5. http://www.oracle.com/technetwork/java/javaee/download-139288.html (Mojarra)

O problema da Mojarra é que ela é meio “bitolada” (só testada no Glassfish). É melhor usar uma implementação como o PrimeFaces para evitar esse problema :slight_smile:

Dica: leia esta página

bruno_r_santana é mais ou menos isso sim, alguns pontos para detalhar :

Não , Primefaces é como se fosse uma “extensão” do JSF, exemplos de implementação é o myfaces na versão 1 do jsf e o mojarra na versão 2 do jsf.

entanglement , um detalhe.

Respondendo a pergunta do bruno, Sim. Na verdade existe duas “frentes” do Hibernate, a que implementa o JPA e a que não segue a especificação.

Pelo que li em alguns lugares o JPA é uma especificação e o Hibernate é a implementação dessa especificação, assim como o Toplink que seria uma implementação de referência.

1-Quando dizemos especificação JPA, seria um documento que informa o que deve ter em uma implementação referente a ORM? Onde posso ler esse documento?
Sim, a JPA faz parte da especificação JEE que é mantida pela Oracle. http://jcp.org/aboutJava/communityprocess/final/jsr317/

2-Quando uso o Hibernate por exemplo estou usando necessariamente o JPA já que o Hibernate implementa a JPA?
Conceitualmente sim, mas você pode estar usando API’s próprias do Hibernate por exemplo:
javax.persistence.Entity na jpa ou org.hibernate.annotations.Entity no hibernate (que está deprecated)

A API de Critéria do Hibernate não faz parte da especificação, ou seja, o Hibernate possui funções que vão além da especificação.

3-A implementação de referência seria uma implementação modelo para outros se basearem e criarem outras implementações?
Sim, serve de referencia junto com o documento de especificação. Exemplo A JRE de referencia é mantida pela oracle existem outras implementações como a J9 e a JRockt

Tenho as mesmas dúvidas com relação a JSF.

4-JSF é a especificação e o Primefaces por exemplo é a implementação? Quando uso Primefaces estou usando JSF?
Não, esses são componentes JSF.

5-Onde consigo ver a especificação do JSF?
Oracle

6-Li que o JSF tem uma implementação de referência também. Essa implementação de referência se chama JSF? Então a implementação JSF implementa a especificação JSF?
Na verdade chama Mojarra que também é conhecida com JSF RI

7-Tanto a especificação JPA quanto a JSF estão dentro da plataforma Java EE, correto?
Sim