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