[英]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.