Est-il possible et / ou recommandé de prendre en charge deux implémentations d'APP?

StackOverflow https://stackoverflow.com/questions/1008499

  •  06-07-2019
  •  | 
  •  

Question

Nous avons développé une application et envisage de prendre en charge deux implémentations différentes de JPA.

Nous utilisons actuellement openjpa et avons un code assez bien testé.

J'ai permuté sur le lien supérieur, exécuté les tests et constaté de nombreux échecs.

On pourrait penser que, parce que JPA est un standard, il ne devrait pas y avoir de différence!

La prise en charge de deux implémentations JPA est justifiée par le fait que nous pouvons fonctionner sur plusieurs serveurs d'applications.

Alors, premièrement, est-il vrai qu'il existe un mappage un-à-un entre l'implémentation et le serveur. je peux utiliser toplink sur WAS par exemple ou openjpa sur Glassfish?

La deuxième question avant d’enquêter plus avant sur les diverses défaillances est la spécification JPA, est-elle si générale qu’elle rendrait impossible la prise en charge de deux implémentations? Devrais-je même essayer de faire en sorte que le code fonctionne avec les deux?

Était-ce utile?

La solution

Nous avons constaté la même chose lorsque nous utilisions TopLink Essentials et avons migré vers EclipseLink. Notre code a éclaté à de nombreux endroits, même si EclipseLink est basé sur la même base de code!

Nous avons découvert que la plupart des cas étaient dus au fait que TopLink Essentials n’était pas conforme à la spécification JPA (par exemple, les requêtes natives renvoient une liste de vecteurs, etc.). Je pense que la portabilité entre EclipseLink et Hibernate serait meilleure, mais probablement pas parfaite.

À un moment donné, vous souhaiterez probablement utiliser des extensions spécifiques à un fournisseur, telles que la mise en cache. Pour cette raison, je recommanderais de choisir un fournisseur JPA et d’utiliser d’abord uniquement les fonctionnalités spécifiées dans les spécifications JPA. Si, au bout d’un moment, vous êtes toujours satisfait du fournisseur, restez-y et commencez à tirer parti des fonctionnalités propres au fournisseur.

Je ne pense pas que votre choix de serveur d'applications limite vos options JPA ou vice versa. Au moins, je ne connais aucune limite.

Autres conseils

Non, ce n'est pas vrai - les serveurs d'applications n'appliquent aucune implémentation JPA et vous devriez pouvoir utiliser OpenJPA avec différents serveurs d'applications. Tout comme vous pouvez utiliser Hibernate n'importe où, vous pouvez utiliser n'importe quelle autre implémentation de JPA. Oui, il se peut que vous ayez des conflits de jar et des problèmes à résoudre avant que les choses ne se passent bien ...

Non, il n'est pas impossible de faire fonctionner votre code pour deux ou plusieurs implémentations de JPA. Mais le but de cet exercice sans nécessité concrète est plutôt irréalisable. En général, il vaut mieux choisir une implémentation JPA qui réponde le mieux à vos exigences ... Mais, encore une fois, je peux imaginer les circonstances dans lesquelles l’utilisation interchangeable de différentes implémentations JPA peut devenir une nécessité: exigences des clients, contraintes de licence, différentes bases de données, différentes plates-formes support (par exemple, mobile, intégré, ...).

Généralement, une implémentation JPA est un sur-ensemble de la spécification. Si vous prenez soin de minimiser la dépendance vis-à-vis des fonctionnalités spécifiques du fournisseur, l'application doit être portable.

Mais dans la pratique, il peut exister des différences subtiles entre les implémentations, ce qui rend difficile la mise en place d'une application réellement cross-JPA.

À mon avis, il est préférable de respecter autant que possible le standard afin que le transfert vers une autre implémentation JPA soit possible avec un minimum de modifications. Si vous développez une application pour une entreprise spécifique dans un contexte spécifique, il n’a pas de sens de la tester contre plusieurs implémentations de JPA, et inversement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top