0

在一家大公司,我们的团队提供 API 用于访问 Oracle DB 上的数据。到目前为止,我们使用普通 SQL (JDBC) 来获取/写入数据库中的数据。所以大多数现有的 API 看起来像这样(好吧,并不总是那么愚蠢 :-)

public class DummyApi {

    private final DataSource datasource;

    public DummyApi(javax.sql.DataSource datasource) {
        this.datasource = datasource;

    }

    public void doSomething() throws SQLException {
         Connection connection = datasource.getConnection();
         PreparedStatement statement = connection.prepareStatement("plain sql query");
         statement.execute();
    }
}

使用这样的 API 很简单,您的最终应用程序是普通的 java SE、spring 还是 javaEE 都没有关系。此外,事务 API 可以与此 API 一起正常工作。我们将它们与 spring TransactionManager(连同 TransactionAwareDataSourceProxy)和 CMA-Java EE 应用程序中的 JTA 一起使用。

现在我们评估在新 API 中使用 JPA。我们目前面临的一个大问题是:我们如何提供一个简单的接口,以便最终应用程序不需要了解 JPA?我们如何使用 DataSource 初始化 EntityManager(例如作为构造函数参数提供)?如果在同一个事务中有旧的、普通的 JDBC-API 和新的 JPA-API(在最终应用程序中开始/回滚),我们如何回滚?

感谢您对此事有所了解!

4

1 回答 1

1

使用 JPA,数据源通常会在 persistence.xml 中设置。如果您需要某种动态数据源,则可以将 DataSource 作为属性传递给 Persistence.createEntityManagerFactory()。

如果您想混合使用 JDBC,大多数 JPA 提供程序都提供了一种获取 JDBC 连接的方法。通常这是使用 em.unwrap(Connection.class) 访问的。您还可以使用 JTA 或 Spring 让事务共享相同的连接。

于 2013-09-10T14:45:36.233 回答