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á.
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.
O problema da Mojarra é que ela é meio “bitolada” (só testada no Glassfish). É melhor usar uma implementação como o PrimeFaces para evitar esse problema
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