繁体   English   中英

如何在 EclipseLink 中获得连接?

[英]how to get connection in EclipseLink?

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

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 链接中执行此操作?

您可以使用: “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 数据源,那么您确实需要这样的实现类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM