一尘不染

如何以编程方式检索持久性单元使用的数据源

hibernate

…实际上没有阅读和解析 persistence.xml

我可以EntityManager使用工厂属性来检索其持久性单元的名称。我可以使用jboss-
as-controller-client
检索可用的数据源。但我发现没有API可以提供特定的数据源EntityManager

String带有名称的A 就足够了。

谢谢

我正在JBoss 7.1.1.Final上通过JPA 2使用Hibernate 4.0.1.Final。

编辑:并且我想尽可能避免从JPA迁移到Hibernate API。

编辑:Augusto的解决方案有效,我在细节上有一些注释:由于ClassCastException:(
org.jboss.as.jpa.container.TransactionScopedEntityManager cannot be cast to org.hibernate.ejb.EntityManagerImpl),EM的转换不起作用,但它对检索到的工厂有效。所以我省略了步骤1。

我也找不到从实例检索数据源名称的方法。因此,我必须对目录名称感到满意:connectionProvider.getConnection().getCatalog();


阅读 205

收藏
2020-06-20

共1个答案

一尘不染

你需要:

  1. 投射EntityManagerEntityManagerImpl(Hibernate实现)
  2. 呼叫 getFactory()
  3. 投放EntityManagerFactoryHibernateEntityManagerFactory
  4. 调用getSessionFactory()并将其投射到SessionFactoryImpl
  5. 调用getConnectionProvider()并将其强制转换为正确的实现。您可以在此处查看实现。我认为这是一个DatasourceConnectionProvider
  6. 打电话getDataSource(),您就完成了。

不幸的是,您必须使用Hibernate API,因为无法使用JPA API检索数据源。

2020-06-20