Ad 2. A więc się da. Kiedyś muszę spróbować takiej konfigurajcji. Zwłaszcza, że w planach mam pisanie aplikacji proof-of-concept, aby pobieżnie zapoznać się z możliwościami Hadoop, a z tego co widzę Spring-Data to ładnie wspiera.
Zastanawiam się jeszcze nad wariantem TomEE, gdyż tam podobno łatwo rozwiązali integracje Spring -> OpenEJB, ale jeszcze nie testowałem.
Co do JSF Scopes: jak zaczynałem pracę miałem z tym straszny problem i często źle ich używałem. Jednak w tej chwili uważam, że to bardzo wygodny mechanizm, zwłaszcza że to tak naprawdę nakładka na standardowe scopes dostępne w Servletach. Do tego możliwość łatwego dependency injection pozwala na pisanie bardzo ładnego, modułowego kodu, zgodnie z zasadą pojedynczej odpowiedzialności. Zarządzanie sesją jest łatwe: jak trzeba można usunąć z niej co trzeba. I tak sesji używa się raczej rzadko, najczęściej wykorzystuje się @ViewScoped. Flash też jest dostępny, jak trzeba np. przekazać obiekt między dwoma redirectami i dostęp do niego jest banalny (Faces.getFlash()). Z reguły mam tak, że dla bardzo skomplikowanego widoku mam np. 10 różnych Managed Beans i każdy zajmuje się innym przypadkiem użycia (np. jak jest skomplikowany widok). Kod jest elegancki, modułowy, łatwy w utrzymaniu. Ale początki były trudne.
Co do stylizowania, przerabiałem to z IceFace 1.8, które wygląda obrzydliwie. To się spokojnie da zrobić, wystarczy potworzyć odpowiednie klasy CSS i mieć osobę, która potrafi to robić. Jeśli style to za mało da się podłączyć jQuery i zbudować customową funkcjonalność. W PrimeFaces jest już dużo łatwiej: jQuery jest dostępne out-of-box, a pisanie logiki walidacji, nawet zgodnej z BeanValidation po stronie klienta jest łatwe.
W tej chwili jest już PrimeFaces 5.0, a całość rozwija się bardzo dynamicznie: wciąż dodają nowe opcje i dopracowywują stare.