Лучшая комбинация - использовать то, что уже есть.JSF 2.0 уже является одной из лучших инфраструктур MVC, поэтому в любом случае она часто будет первым выбором.
При использовании EJB 3.1 это почти всегда в сочетании с реализацией Java EE, поэтому в этом случае JSFуже есть и просто использовать его - это просто.
Различные технологии в стеке Java EE созданы для работы друг с другом, поэтому наиболее типичным является стек, состоящий из JSF + CDI + EJB + JPA.идеальная комбинация, и вы найдете наибольшую поддержку для этого.
Лично я не думаю, что в Spring есть место для стека EJB / CDI.Эти две технологии являются прямыми конкурентами, которые решают одну и ту же проблему (немного) по-разному.Сочетание их, скорее всего, только усложнит ваш код.