大企業では、私たちのチームは Oracle DB のデータにアクセスするための API を提供しています。これまではプレーン 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 について知る必要がないように、単純なインターフェースをどのように提供できるでしょうか? EntityManager を DataSource で初期化するにはどうすればよいですか (たとえば、コンストラクターのパラメーターとして提供されます)。また、古いプレーンな JDBC-API と新しい JPA-API が同じトランザクション (エンド アプリケーションでの開始/ロールバック) にある場合、どのようにロールバックできますか?
問題について少し光を当ててくれてありがとう!