Vou responder algumas das suas perguntas sobre o Hibernate, mais nunca trabalhei com Ibatis.
Não sei porque o hibernate dificulta as coisas na hora de fazer os relatórios. A não ser se nos relatórios for trabalhar com SQL puro, não podendo assim reaproveitar o que está feito… Existem muitas maneiras em passar as informações para um relatório, é possível passar um XML ou até um java.util.List
Acredito que as pessoas utilizem o hibernate pq:
- A maioria dos desevolvedores conhece, há mão de obra no mercado, fóruns etc etc…
- Eu acho a documentação do Hibernate excelente. Não só diz como fazer… Mas porque fazer desse ou daquele jeito.
- Querendo ou não o JPA “nasceu” do hibernate. E JPA é uma especificação da Sun, muitos dizem que não faz diferença mais isso influencia muito a decisão das empresas.
Vou fazer um super resumão em relação ao Spring e EJB.
O Spring surgiu numa época onde não tinhamos EJB 3.0. Por isso ficou tão popular, facilita muito a vida dos programadores, coisa que o EJB 2.1 não fazia, alias só dificultava.
O Spring faz praticamente todas as coisas que o EJB 3 faz (exceto transação distribuída) com objetos POJO através de arquivos de configuração ou Annotations
O suporte a injeção de dependência do Spring é excelente, já o EJB 3 só faz isso para alguns tipos de componente. Ex: PersistentContext - EntityManager
A nova especificação da Sun, conhecida como WebBeans (mudou de nome recentemente) deve igualar as funcionalidades de injeção de dependência do Spring.
É possível integrar o Spring a praticamente qualquer Framework existente e ele ainda possui classes utilitárias para eles.
O Spring não é uma especificação da Sun. O que não o torna um Framework ruim. Mas não há alternativas de implementação.
Vale a pena também dar uma olhada no JBoss Seam que nada mais é do que (EJB 3.0 + RichFaces + JPA + Injeção de Dependência).
A JBoss diz que não, mais o JBoss Seam e o Spring são de certa maneira concorrentes, digo de certa maneira, porque é possível utilizar o Seam e o Spring juntos.