簡體   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