JSF + Hibernate + Jboss. Erro ao iniciar projeto

Pessoal, estou tentando fazer um projeto com JSF + Hibernate + Jboss, mas está dando erro ao iniciar o projeto. Estou seguindo explicações do livro “Programação Java para a Web”. Como sugestão do livro estou implementando a técnica Open Session in View, e pra isso estou utilizando uma classe Filter, mas por algum motivo que eu desconheço não está dando certo. O log dá o seguinte erro (não estou postando o log inteiro, apenas a parte do erro. Se for preciso eu posto o resto):

21:04:22,668 INFO  [stdout] (MSC service thread 1-4) Criação inicial do objeto SessionFactory falhou. Erro: org.jboss.msc.service.CircularDependencyException: Service jboss-as has a circular dependency
21:04:22,669 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/Financeiro]] (MSC service thread 1-4) Exception starting filter conexaoFilter: java.lang.ExceptionInInitializerError
	at financeiro.conexao.HibernateUtil.buildSessionFactory(HibernateUtil.java:17) [classes:]
	at financeiro.conexao.HibernateUtil.<clinit>(HibernateUtil.java:8) [classes:]
	at financeiro.filter.ConexaoHibernateFilter.init(ConexaoHibernateFilter.java:40) [classes:]
	at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:447) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3269) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:3865) [jbossweb-7.0.13.Final.jar:]
	at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:90) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_09]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_09]
	at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_09]
Caused by: org.jboss.msc.service.CircularDependencyException: Service jboss-as has a circular dependency
	at org.jboss.msc.service.ServiceContainerImpl.detectCircularity(ServiceContainerImpl.java:617)
	at org.jboss.msc.service.ServiceContainerImpl.detectCircularity(ServiceContainerImpl.java:588)
	at org.jboss.msc.service.ServiceContainerImpl.install(ServiceContainerImpl.java:562)
	at org.jboss.msc.service.ServiceTargetImpl.install(ServiceTargetImpl.java:201)
	at org.jboss.msc.service.ServiceControllerImpl$ChildServiceTarget.install(ServiceControllerImpl.java:2228)
	at org.jboss.msc.service.ServiceTargetImpl.install(ServiceTargetImpl.java:201)
	at org.jboss.msc.service.ServiceControllerImpl$ChildServiceTarget.install(ServiceControllerImpl.java:2228)
	at org.jboss.msc.service.ServiceBuilderImpl.install(ServiceBuilderImpl.java:307)
	at org.jboss.as.naming.WritableServiceBasedNamingStore.bind(WritableServiceBasedNamingStore.java:70)
	at org.jboss.as.naming.WritableServiceBasedNamingStore.rebind(WritableServiceBasedNamingStore.java:90)
	at org.jboss.as.naming.NamingContext.rebind(NamingContext.java:237)
	at org.jboss.as.naming.InitialContext.rebind(InitialContext.java:178)
	at javax.naming.InitialContext.rebind(InitialContext.java:431) [rt.jar:1.7.0_09]
	at org.hibernate.util.NamingHelper.bind(NamingHelper.java:97) [hibernate3.jar:3.6.10.Final]
	at org.hibernate.impl.SessionFactoryObjectFactory.addInstance(SessionFactoryObjectFactory.java:113) [hibernate3.jar:3.6.10.Final]
	at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:367) [hibernate3.jar:3.6.10.Final]
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1872) [hibernate3.jar:3.6.10.Final]
	at financeiro.conexao.HibernateUtil.buildSessionFactory(HibernateUtil.java:14) [classes:]
	... 11 more

21:04:22,682 ERROR [org.apache.catalina.core.StandardContext] (MSC service thread 1-4) Error filterStart
21:04:22,682 ERROR [org.apache.catalina.core.StandardContext] (MSC service thread 1-4) Context [/Financeiro] startup failed due to previous errors
21:04:22,690 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-4) MSC00001: Failed to start service jboss.web.deployment.default-host./Financeiro: org.jboss.msc.service.StartException in service jboss.web.deployment.default-host./Financeiro: JBAS018040: Failed to start context
	at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:95)
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_09]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_09]
	at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_09]

O erro diz que há uma dependência circular, mas eu não sei exatamente o que é isso. O meu mapeamento parece estar certo.

Classe Filter:

...
public class ConexaoHibernateFilter implements Filter {
	
	private SessionFactory sessionFactory;

	@Override
	public void destroy() {	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		try {
			this.sessionFactory.getCurrentSession().beginTransaction();
			chain.doFilter(request, response);
			this.sessionFactory.getCurrentSession().getTransaction().commit();
			this.sessionFactory.getCurrentSession().close();
		} catch (Throwable e) {
			try {
				if (this.sessionFactory.getCurrentSession().getTransaction().isActive()) {
					this.sessionFactory.getCurrentSession().getTransaction().rollback();
				}
			} catch (Throwable t) {
				t.printStackTrace();
			}
			throw new ServletException(e);
		}
	}

	@Override
	public void init(FilterConfig config) throws ServletException {
		this.sessionFactory = HibernateUtil.getSessionFactory();
	}

}

HibernateUtil:

...
public class HibernateUtil {
	
	private static final SessionFactory SESSION_FACTORY = buildSessionFactory();
	
	private static SessionFactory buildSessionFactory() {
		try {
			Configuration cfg = new Configuration();
			cfg.configure("hibernate.cfg.xml");
			return cfg.buildSessionFactory();
		} catch (Throwable e) {
			System.out.println("Criação inicial do objeto SessionFactory falhou. Erro: " + e);
			throw new ExceptionInInitializerError(e);
		}
	}
	
	public static SessionFactory getSessionFactory() {
		return SESSION_FACTORY;
	}
}

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>Financeiro</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
  <context-param>
  	<param-name>javax.faces.PROJECT_STAGE</param-name>
  	<param-value>Development</param-value>
  </context-param>
  <filter>
  	<filter-name>conexaoFilter</filter-name>
  	<filter-class>financeiro.filter.ConexaoHibernateFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>conexaoFilter</filter-name>
  	<url-pattern>*.jsf</url-pattern>
  </filter-mapping>
</web-app>

hibernate.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                                         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
 <session-factory name="">
  <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  <property name="hibernate.connection.password">senha</property>
  <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/banco</property>
  <property name="hibernate.connection.username">user</property>
  <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
  <property name="hibernate.current_session_context_class">thread</property>
  <property name="hibernate.c3p0.idle_test_period">3000</property>
  <property name="hibernate.c3p0.max_size">20</property>
  <property name="hibernate.c3p0.max_statements">50</property>
  <property name="hibernate.c3p0.min_size">5</property>
  <property name="hibernate.c3p0.timeout">300</property>
  <property name="hibernate.show_sql">true</property>
  <property name="hibernate.format_sql">true</property>
  <property name="hibernate.generate_statistics">true</property>
  <property name="hibernate.use_sql_comments">true</property>
  <property name="hibernate.hbm2ddl.auto">update</property>
  <mapping class="financeiro.dto.Pessoa"/>
  <mapping class="financeiro.dto.Banco"/>
  <mapping class="financeiro.dto.Periodo"/>
  <mapping class="financeiro.dto.Movimentacao"/>
  <mapping class="financeiro.dto.Receita"/>
  <mapping class="financeiro.dto.Gasto"/>
 </session-factory>
</hibernate-configuration>

O erro parece ser pelo fato de eu estar usando o JBoss.

Coloquei no Tomcat e funcionou.

Alguém têm alguma explicação para não ter funcionado no JBoss?