Confusão sobre arquitetura JSF+Hibernate (+Spring?)

Pessoal gostaria da opnião de vocês.
Eu estou começando um novo projeto e gostaria de fazer ele utilizando JSF (tomahawk+myFaces+richFaces), hiberate 3,java 1.5 e spring (porque colocar ele para controlar as transações do hibernate pois lembro que quando iniciei o estudo sobre o hibernate a parte de controle transacional controlado pelo spring era algo muito faclitador)
Então, gostaria de saber de vocês que já usaram esses frameworks algumas coisas:

tomahawk+myFaces+richFaces é possível?Juntos no mesmo projeto?
Hibernate + spring é uma boa?Por onde começar?Vejo um volume muito grande de informações, uns falam de spring annotations,outros falam de hibernate puro estou meio confuso.
DAOGenerico?Bom ou ruim?

Vi esse artigo:
http://www-128.ibm.com/developerworks/java/library/j-genericdao.html

e esse:
http://www.java2s.com/Code/Java/Hibernate/GenericDaoCreate.htm

O segundo parece ser muito mais simples,mas o primeiro parece ser muito mais elegante.
Qual dos dois é mais indicado?Eu estou buscando aprender a usar hibernate/spring para avaliar a qualidade dos dois juntos em relação a uma outra solução.
E então?Coments?

É algo que está me confundindo muito a criação dessa arquitetura.
Por exemplo, no blog do Urubatan ele ensina usando o spring/hibernate.
Já no site do hibernate ensina utilizando hibernate, sem spriing.
Qual seira a melhor opção?
Estou pensando em usar o tomcat, mas o spring não tem restrição para rodar apenas em servidores jee não?
Por favor,gostaria de algumas opniões da experiência de vocês com spring/hibernate/tomcat.
Se possível, como configurar isso tudo?Estou com muitas dúvidas.

Acabei não criando DAOGeneric e usei o seguinte application context:

[code]<?xml version="1.0" encoding="UTF-8"?>

<bean id="dataSourceMonografias"
	class="org.apache.commons.dbcp.BasicDataSource"
	destroy-method="close">
	<property name="driverClassName"
		value="org.gjt.mm.mysql.Driver" />
	<property name="url"
		value="jdbc:mysql://localhost:3306/monografias" />
	<property name="username" value="root" />
	<property name="password" value="popete" />
</bean>

<bean id="sessionFactoryMonografias"
	class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

	<property name="dataSource" ref="dataSourceMonografias" />

	<property name="hibernateProperties">
		<props>
			<prop key="hibernate.dialect">
				net.sf.hibernate. dialect.MySQLDialect
			</prop>
			<prop key="current_session_context_class">thread</prop>
			<prop key="cache.provider_class">
				org.hibernate.cache.NoCacheProvider
			</prop>
			<prop key="show_sql">true</prop>
			<prop key="connection.pool_size">10</prop>
		</props>
	</property>

	<property name="mappingDirectoryLocations">
		<list>
			<value>classpath:/br/ucsal/projeto/model</value>
		</list>
	</property>

</bean>

<bean id="instituicaoDao"
	class="br.ucsal.projeto.dao.impl.InstituicaoDAOImpl">
	<property name="sessionFactory" ref="sessionFactoryMonografias" />
</bean>

<bean id="autorDao"
	class="br.ucsal.projeto.dao.impl.AutorDAOImpl">
	<property name="sessionFactory" ref="sessionFactoryMonografias" />
</bean>

<bean id="cursoDao"
	class="br.ucsal.projeto.dao.impl.CursoDAOImpl">
	<property name="sessionFactory" ref="sessionFactoryMonografias" />
</bean>

<bean id="documentoDao"
	class="br.ucsal.projeto.dao.impl.DocumentoDAOImpl">
	<property name="sessionFactory" ref="sessionFactoryMonografias" />
</bean>



<!-- 
	<property name="mappingClass">
	<list>
	<value>br.ucsal.projeto.model.AutorModel</value>
	<value>br.ucsal.projeto.model.CursoModel</value>
	<value>br.ucsal.projeto.model.InstituicaoModel</value>
	<value>br.ucsal.projeto.model.DocumentoModel</value>
	</list>
	</property>
-->

[/code]
só que devidos a problemas com jsf ainda não pude testar se realmente está funcionando.
Então a pergunta, basicamente é.
O que acham dessa solução usando spring+hibernate?

Desaconselho rodar Spring dentro de um servidor Java EE…

Por que?
Para mim o servidor tanto faz, pois é uma aplicação experimental.
Pode ser tomcat/jboss ou outro qualquer, não estou usando nada da arquitetura jee.
Uso jsf 1.2,spring,hibernate, quero dizer, pretendo usar, só que estou tendo muita dificuldade com problema de configuração de ambiente.
Não consegui colocar o jsf para rodar no jboss 4.2.2.
Hoje meu atual ´problema é um nullpointer em um selectItem que tenho no meu faces, só que no construtor do mesmo eu instancoi esse abençoado list.
Vocês já usaram essa arqutietura?