session-in-view Hibernate パターンを実装するために、カスタム ServletFilter を次のように使用しました。
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
try {
// Starting a database transaction
sessionFactory.getCurrentSession().beginTransaction();
// Continue the request
chain.doFilter(request, response);
// Committing the database transaction
sessionFactory.getCurrentSession().getTransaction().commit();
} catch (StaleObjectStateException se) {
// Some codes here
}
}
リクエストが処理された後にトランザクションがコミットされるようです。しかし、Spring BlazeDS Integration を使用して Flex からの出力をシリアル化すると、問題が発生します。
BlazeDS は、トランザクションがコミットされる前に (行 chain.doFilter で) 遅延フェッチを使用して、結果オブジェクトとそのすべての子オブジェクトをシリアル化します。オブジェクトを取得するために非常に多くのクエリがデータベースに殺到し、時にはそれが終わらないこともあります。
この問題を解決するにはどうすればよいですか? BlazeDS でシリアル化の深さを制限する構成はありますか?