Context:
Hibernate uses lazy initialization to load entities. E.g if some association is accessed after Hibernate session is closed we get LazyInitializationException. To solve this problem Hibernate team invented a pattern called Open Session In View. Spring offers OpenSessionInViewFilter that implement this pattern. This filter is used in many applications we have developed including AMS.
Problem:
Using OpenSessionInViewFilter solves issues with accessing uninitialized data from view. However the problem is that all intialization requests are made in a non-transactional manner. Hibernate will create new transaction for each initialization. What problems does this actually cause? First performance will be affected as DB needs to create much more transactions. Secondly atomacity of "transaction" is lost. How serious are these problems? I dare to say that not very serious so I don't think it is absolutely required to fix this for older applications but it's good thing to know when designing new applications.
Solution A:
Add another filter that will wrap the entire request inside a transaction. Downside is that we now have one big tx. Also we may discover the fact the tx needs to be rolled back after response has already been sent.
Solution B:
Improve solution A by changing tx attributes of business layer from propagation_required to propagation_requires_new. Now we can make the view rendering tx read-only and view rendering will be independent of business layer tx issues. Downside is that if service A is calling service B then we may not need to start new tx for B. One optimization here is using facades. These facades provide few methods that are specially tailored for presentation layer.
Resulting transactions:

To achieve this solution here is what we need:
- simple filter that will be wrapped inside a read-only tx.
- move tx management from services to facades.
- change transaction attributes in facade to propagation_requires_new.