私は、JPAエンティティ(Hibernateを使用)を管理するRESTサービス(Apache-CXFを使用)を提供するアプリケーションを作成しています。
トランザクション管理に少し迷っています。このトピックについてアドバイスをお願いします。
今のところ、トランザクション管理の目的でのみ、ビジネスRESTサービスと下位サービスの間に中間層を配置しました。
現在、私のコードは次のようになっています。
@Service
class PersistanceService<MyBusinessClass>{
MyBusinessClass load(Long id);
void save(MyBusinessClass businessObject);
}
@Service
class BusinessService<MyBusinessClass>{
void doSomethingOn(MyBusinessClass businessObject);
}
@Service
class TransactionBusinessService<MyBusinessClass>{
@Transactional
void doSomethingOn(Long id) {
MyBusinessClass businessObject = persistanceService.load(id);
businessService.doSomethingOn(businessObject);
persistanceService.save(businessObject);
}
}
@Service
@path("/foo")
class RESTService {
@Path("/doSomething")
void doSomethingOn(Long id) {
transactionBusinessService.doSomethingOn(id);
}
}
TransactionBusinessServiceはやり過ぎだと思います。''Spring''または''CXF''でトランザクションを処理したい:リクエストは適切な粒度であると思います:各リクエストの最初にエンティティマネージャーを初期化し、最後に更新をコミットします。
@TransactionalアノテーションをRESTメソッド自体に追加しようとしましたが、無視されているか、CXFと競合しているようです。
- トランザクションをリクエストレベルで委任し、もう気にしないのは良い考えだと思いますか?
- SpringまたはCXFでトランザクション管理を要求にバインドするにはどうすればよいですか?
アドバイスをよろしくお願いします。