Obtenir une connexion JDBC depuis EclipseLink
à l'aide de EclipseLink comme JPA 2.0 fournisseur, je peux obtenir une connexion JDBC en appelant simplement
Connection con = entityManager.unwrap(Connection.class);
Mais je suis sûr que je suis responsable. Dois-je fermer la connexion après l'envoi de mes requêtes? Ou je ne suis pas autorisé à fermer la connexion, parce que EclipseLink utilise également cette connexion en interne. Ou n'est-il pas de soins, parce que EclipseLink observe mon comportement et ferme la connexion automatiquement si je ne le fais pas?
source d'informationauteur user1494080
Vous devez vous connecter pour publier un commentaire.
Si vous êtes dans le cadre d'un accord conjoint de projet de transaction, la connexion sera géré par le fournisseur (EclipseLink). Si vous êtes en dehors d'une transaction, vous êtes responsable de la gestion de la connexion à vous-même.
Voir le lien suivant pour plus d'informations:
http://wiki.eclipse.org/EclipseLink/Examples/JPA/EMAPI#Getting_a_JDBC_Connection_from_an_EntityManager
Une bonne question. Il semble que la documentation est incomplète de la sémantique de la
unwrap()
appels.Concernant EclipseLinken fonction de ce que j'ai obtenu à partir de la source:
EclipseLink vous donne un référence à la
connection
qu'il utilise pour le active de la session client transaction. Si aucune transaction n'est active, un nouveau sera crééassocié à la session et retourné à partir de launwrap()
méthode.Comme un résultat, à mon humble avis, un commit/rollback d'une telle obtenu
Connection
peut conduire à un comportement indéfini et/ou à des exceptions. En est de même pour l'exécution de DML qui a changé les enregistrements ont été précédemment mis en cache par eclipselink les caches internes ou pour lesquels des entités gérées existent.Ainsi, lorsque l'utilisation de cette API, surtout si la transaction sous-jacente est sale, être prudent.
Si vous pouvez vous référer à l'interne eclipselink classes, vous pouvez accéder à eclipselink connexion interne de la piscine pour obtenir un
Connection
exclusivement (regardezorg.eclipse.persistence.sessions.server.ServerSession.getConnectionPool(String)
).