1

バックエンドを「リソース」(Restlet など) として公開し、サービス層を排除して、Rest リソースが Dao と直接やり取りできるようにしたいと考えています。このように、リソースコントラクトであり、インターフェイスではありません。

トランザクションが Spring によってローカルで管理されている場合、Spring MVC 3 コントローラーで @Transactional セマンティクスを使用する際に問題はありますか? ロールバックと例外のキャッチに関する問題はありますか?

@RequestMapping(value = "/user/{userId}", method = RequestMethod.PUT)
@ResponseStatus(HttpStatus.OK)
@Transactional
public void updateUser(@PathVariable Long userId, @RequestBody ProfileUser user) {

   // dao update
}

spring config:
<tx:annotation-driven />
 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
4

1 に答える 1

0

ここで問題が発生する可能性があると思います。デフォルトでは、Spring は JDK 動的プロキシを使用してトランザクション動作をメソッドに適用します。これは、適切なインターフェイス、つまり updateUser メソッドを公開するインターフェイスを実装するコントローラーに依存します。Spring blogに優れたブログ投稿があります。

Spring がプロキシでメソッドを見つけられないため、エラーが表示される可能性があります。

Spring に CGLIB ベースのプロキシを使用するように指示する場合は、上記のアプローチを使用できます。これについては、こちらのドキュメントで説明されています。

于 2012-10-09T23:14:30.637 に答える