Comment récupérer la source de données utilisée par une unité de persistance par programme
...sans vraiment de la lecture et de l'analyse de la persistence.xml
Je peux récupérer le nom de l'unité de persistance d'un EntityManager
à l'aide de la caractéristiques de l'usine de. Je peux récupérer les sources de données disponibles à l'aide de la jboss en tant que contrôleur de client. Mais je n'ai trouvé aucune API qui pourrait me donner la source de données d'un particulier EntityManager
.
Un String
avec un nom allait être suffisant.
Merci
Je suis en train de travailler avec Hibernate 4.0.1.Finale sur JPA 2 sur JBoss 7.1.1.Final.
EDIT: et je voudrais éviter de s'écarter de JPA pour Hiberner Api si possible.
EDIT : Augusto de la solution a fonctionné, j'ai quelques notes sur des détails: Le casting de l'EM n'a pas fonctionné en raison d'une ClassCastException
🙁org.jboss.as.jpa.container.TransactionScopedEntityManager cannot be cast to org.hibernate.ejb.EntityManagerImpl
), mais il a travaillé pour l'extrait de l'usine. J'ai donc omis l'étape 1.
Je n'arrivais pas à trouver un moyen de récupérer le nom de la source de données de l'instance. J'ai donc dû me contenter de le nom de catalogue: connectionProvider.getConnection().getCatalog();
source d'informationauteur kostja
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de:
EntityManager
àEntityManagerImpl
(Hibernate mise en œuvre)getFactory()
EntityManagerFactory
àHibernateEntityManagerFactory
getSessionFactory()
et de le jeter auxSessionFactoryImpl
getConnectionProvider()
et de le jeter à la mise en œuvre correcte. Vous pouvez voir les implémentations ici. Je vais supposer que c'est unDatasourceConnectionProvider
getDataSource()
et vous avez terminé.Malheureusement, vous devez utiliser l'API Hibernate, comme il n'y a aucun moyen de récupérer la source de données à l'aide de l'API JPA.
Si vous voulez juste le nom de la source de données et que le nom de source de données a été fourni par JPA moyens, vous devriez être en mesure d'obtenir ces informations via:
ou
selon la façon dont vous avez défini la source de données.
Au Printemps de l'environnement, vous pouvez utiliser ceci:
J'avais besoin de faire cela dans le but d'exécuter des voies de migration les migrations. Je n'ai pas pu récupérer la source de données à l'aide de Augusto méthode, mais j'ai été capable de recréer la source de données en récupérant l'url, le nom d'utilisateur & mot de passe à partir de la SessionFactory propriétés:
Essayez ceci :
Je suis en utilisant Hibernate 5.0.x
C'est la façon dont je reçois une connexion à partir de la persistance de la piscine:
La
emf
paramètre est JPA standardjavax.persistence.EntityManagerFactory
généralement acquis à l'échelle mondiale à l'aide de:ou par injection: