在一家大公司,我们的团队提供 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(在最终应用程序中开始/回滚),我们如何回滚?
感谢您对此事有所了解!