Qu'est-ce qu'une mise en œuvre de L'app?

je commence avec JPA, et je suis confus quant à l'implémentation exacte de JPA(EclipseLink, TopLink, Hibernate, etc.) faire.

je comprends le rôle théorique de L'App, mais quel est le but des différentes implémentations? Y a-t-il des différences significatives entre ces choix, comme c'est le cas pour les connecteurs/drivers DB? Qui est le meilleur pour un débutant?

J'irai probablement avec EclipseLink parce que c'est ce que la plupart de la littérature que j'ai lu utilise.

35
demandé sur Manuel Drieschmanns 2010-12-18 10:11:51

5 réponses

JPA

JPA est juste une API (d'où Java Persistence API ) qui nécessite une implémentation à utiliser.

une analogie serait d'utiliser JDBC. JDBC est une API pour accéder aux bases de données, mais vous avez besoin d'une implémentation (un fichier driver jar) pour pouvoir vous connecter à une base de données. Sans pilote, vous ne pouvez rien faire avec une base de données.

avec JPA, comme je l'ai dit, vous avez besoin d'un implémentation, un ensemble de classes qui se trouvent "en dessous" JPA, et une telle implémentation fera ce que vous voulez.

votre application utilise L'API JPA (cette formulation est un peu cubersome, mais j'espère que vous obtenez l'idée), qui communique alors avec l'implémentation sous-jacente.

Populaire implémentations inclure Hibernate , EclipseLink , OpenJPA et d'autres.

chacun d'eux implémente L'API JPA, donc si vous n'utilisez que JPA, chaque implémentation doit agir de la même manière.

mais! La fonctionnalité fournie par ces implémentations pourrait aller au-delà de l'API standard JPA.

si vous souhaitez utiliser cette fonctionnalité particulière, vous devrez utiliser L'API spécifique au fournisseur qui ne sera pas compatible avec les autres.

par exemple, même si JPA définit l'annotation @Id avec Options de génération D'ID, lorsque vous utilisez Hibernate, vous pouvez utiliser aussi @org.hibernate.annotations.GenericGenerator pour des stratégies de génération spécifiques à L'hibernation.

L'utilisation de cette annotation ne fonctionnera pas à moins que vous utilisiez Hibernate comme implémentation sous-jacente.

l'essentiel est que JPA est le" plus petit dénominateur commun " que chaque fournisseur implémente, et chaque implémentation peut avoir des fonctionnalités plus avancées qui ne sont pas standard.

si vous voulez votre application pour être portable, utiliser uniquement JPA. Si vous êtes sûr que vous ne changerez pas d'avis plus tard et que vous ne changerez pas d'implémentations, utilisez les fonctionnalités spécifiques au fournisseur de JPA+.

76
répondu darioo 2010-12-18 08:41:54

c'est la même chose que Java, il a une spécification (Java SE, Java EE) et une implémentation, la plupart des gens utilisent l'implémentation de référence (par Sun / Oracle) qui est un plan directeur pour les autres pour faire leur propre implémentation "meilleure" et "avancée" de la spécification (API, Interfaces et documentation / JavaDoc si vous avez besoin d'une définition d'un seul mot, bien qu'il soit beaucoup plus que cela)

donc le Java / JDK que vous utilisez le plus probablement est juste une implémentation (qui est très populaire). Il y a beaucoup plus d'implémentations là-bas, certaines ont plus d'options de configuration de collecte des ordures, certaines prétendent être plus rapides, et certaines ne valent tout simplement pas la peine d'utiliser.

donc l'implémentation fait essentiellement tout, elle a le code, où le JPA est une API (sous-entendu par son nom, Java Persistance API) par exemple, encore une fois, plus sur les interfaces et la documentation que l'implantation réelle de l'interface.

il Pense que la classe abstraite Hibernate implémentation JPA / EclipseLink s'étend / mise en œuvre des

en ce qui concerne JPA, par opposition à Hibernate qui a une seule implémentation, l'idée est de découpler l'interface de l'implémentation, afin que la "meilleure" implémentation gagne et que tout le monde puisse participer au jeu, pas seulement le créateur de l'interface.

cela permet par exemple à Google App Engine de prendre en charge JPA, car il suffit de suivre une API (Datanucléus est le implémentation) s'il devait utiliser Hibernate, il aurait fallu modifier la version Hibernate pour prendre en charge le format big Table de Google (le fait que JPA in GAE n'est pas si génial est une autre histoire)

6
répondu Eran Medan 2013-06-15 12:58:43

JPA lui-même est juste une spécification, pas un produit; il ne peut pas effectuer la persistance ou quoi que ce soit d'autre par lui-même. JPA est juste un ensemble d'interfaces, et nécessite une mise en œuvre. Il y a des implémentations open-source et commerciales de JPA à choisir et tout serveur D'application Java EE 5 devrait fournir un support pour son utilisation. JPA a également besoin d'une base de données pour persister.

4
répondu supercena 2013-05-14 15:28:35

L'API Java Persistence (JPA) est une spécification D'interface de programmation D'application Java qui décrit la gestion des données relationnelles dans les applications utilisant Java Platform, Standard Edition et Java Platform, Enterprise Edition. L'API Java Persistence a été créée dans le cadre des travaux du groupe D'experts JSR 220 du processus communautaire Java. Le JPA 2.0 était le travail du groupe d'experts jsr 317.

ainsi, JPA fournit un ensemble d'interfaces qui doit être mis en œuvre. Il y a toujours des implémentations de référence disponibles pour les spécifications linguistiques , dans ce cas EclipseLink est l'implémentation de référence.

Hibernate d'un autre côté, ne mettre en œuvre spécification JPA, mais il a également sa propre API native.

Par Exemple:

dites que vous avez conçu une spécification D'authentification qui ne contient qu'une interface:

public interface AccessAuthenticator {
    public boolean verifyAccess(String username,String saltedPassword);
}

maintenant ceci spécification ne contient qu'une seule interface et une seule méthode.

pour utiliser cette spécification(plus précisément la méthode verifyAccess ()), vous devez avoir une implémentation.

il peut y avoir de nombreuses implémentations pour cette spécification. par exemple, une organisation peut fournir son implémentation pour l'authentification de ses propres serveurs. vous devez avoir cette implémentation pour vous connecter au serveur d'organisations (il peut y avoir une API native impliquer.)

un autre aspect de fournir une spécification est que vous n'utilisez pas réellement la mise en œuvre concrète de quoi que ce soit , alors aujourd'hui dire que vous utilisez hibernate pour se connecter à votre base de données, mais demain un meilleur ORM vient en image qui met en œuvre JPA spec, puis tout ce que vous devez faire est de changer la dépendance dans votre projet (en mots simples remplacer le fichier JAR de mise en œuvre/éditer le fichier pom).

1
répondu Faizan Mohammad 2016-02-23 12:33:16

JPA est une spécification de L'API Java qui décrit la gestion des données relationnelles dans les applications utilisant la plate-forme Java. Vous pouvez penser JPA comme un ensemble de règles, et donc il ne peut pas faire de travail concret pour vous, mais vous aide à standardiser votre mise en œuvre.

vous avez donc besoin d'une mise en œuvre concrète qui mettra en œuvre JPA (ensemble de règles). Hibernation, OpenJPA sont peu de célèbres implémentations JPA.

0
répondu Badal 2014-02-12 05:00:20