【问题标题】:how to get connection in EclipseLink?如何在 EclipseLink 中获得连接?
【发布时间】:2022-07-23 00:53:20
【问题描述】:

我正在将我的应用程序从 hibernate 迁移到 eclipseLink。在 Hibernate 中,我以这种方式获得连接。

import org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl;
public class HibernateXADataSourceConnectionProvider extends DatasourceConnectionProviderImpl {

    @Override
    public Connection getConnection() throws SQLException {
        if (getDataSource() != null && getDataSource() instanceof XADataSource) {
            XAConnection xaConnection = ThreadLocalXAConnection.get();
            if (xaConnection == null) {
                xaConnection = ((XADataSource) getDataSource()).getXAConnection();
            }
            return xaConnection.getConnection();
        }
        return super.getConnection();
    }
}

如何在 eclipse 链接中做到这一点?

【问题讨论】:

标签: java hibernate eclipselink


【解决方案1】:

您可以使用: "javax.persistence.jtaDataSource"/"jakarta.persistence.jtaDataSource" 或者 "javax.persistence.nonJtaDataSource"/"jakarta.persistence.nonJtaDataSource" 持久性属性。

这些通常用于传入一个字符串以在容器上下文中查找,但 EclipseLink 接受直接传入任何 javax.sql.DataSource 实例。

例如:

javax.sql.DataSource yourDatasourceinstance = getDataSource();
HashMap<String, Object> map = new HashMap<>();
map.put("javax.persistence.nonJtaDataSource", yourDatasourceinstance);
EntityManagerFactory factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME, map);

HibernateXADataSourceConnectionProvider 类虽然看起来像一个包装器,但它以某种方式配置为遍历提供给 Hibernate 的数据源;如果您需要从答案中获得更多信息以将其专门转换为 EclipseLInk,则您必须告诉您如何配置该数据源并将其放入 Hibernate。我不确定为什么如果您在 JTA 环境中使用 XA 数据源,那么您确实需要这样的实现类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 2017-09-18
    • 2013-02-13
    相关资源
    最近更新 更多