Error creating bean with name 'br.com.caelum.vraptor.http.EncodingHandlerFactory':  XML
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Autor Mensagem
seufagner
JavaEvangelist
[Avatar]

Membro desde: 06/05/2005 16:33:09
Mensagens: 447
Localização: Rio de Janeiro - RJ
Offline

Minha aplicação está utilizando VRaptor 3.1 com integração com beans gerenciados exclusivamente pelo Spring, inclusive o datasource.

Ao tentar acessar algum recurso estou tomando este erro. A classe EncodingHandlerFactory tem uma dependência com o ServletContext, porém, como o trace informa, existem DOIS, mesmo não fazendo qualquer referência direta, na minha aplicação, a esta API.

Sugestões são bem vindas

2010-01-23 21:23:27.139::WARN: /juriprev-0.1/
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'br.com.caelum.vraptor.http.EncodingHandlerFactory': FactoryBean threw exception on object creation; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'encodingHandlerFactory': Unsatisfied dependency expressed through constructor argument with index 0 of type [javax.servlet.ServletContext]: : No unique bean of type [javax.servlet.ServletContext] is defined: expected single matching bean but found 2: [javax.servlet.ServletContext, servletContext]; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [javax.servlet.ServletContext] is defined: expected single matching bean but found 2: [javax.servlet.ServletContext, servletContext]
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:150)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:109)
at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1387)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:244)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:385)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:375)
at org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1069)
at org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:221)
at br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.getBean(VRaptorApplicationContext.java:240)
at br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:5
at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:90)
at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:55)
at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:8
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089)
at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:111)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:365)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:211)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
at org.mortbay.jetty.Server.handle(Server.java:285)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:502)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:821)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:513)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:20
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:37
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:36
at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)

@seufagner
seufagner.com.br
"Simplicidade é a maior forma de sofisticação"
Leonardo Da vinci
[Email] [WWW]
Paulo Silveira
Administrador
[Avatar]

Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline

ola

como esta sua configuracao no web.xml? qual a versao do vraptor? o spring é 3?

estranho, parece que tudo esta sendo registrado duas vezes, com nomes diferentes.

abracos

http://blog.caelum.com.br twitter: @paulo_caelum


[Email] [WWW]
seufagner
JavaEvangelist
[Avatar]

Membro desde: 06/05/2005 16:33:09
Mensagens: 447
Localização: Rio de Janeiro - RJ
Offline

Paulo

A versão VRaptor é como citei ao abrir o tópico, 3.1, que já vem com a distribuição do Spring 3 também. Segue meu web.xml. (Eu já comentei o Servlet do Tiles e deu o mesmo erro)


<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee" xmlnssi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>ticred</display-name>

<!-- Filtro do Open Session In View controlado pelo Spring -->
<filter>
<display-name>Open EntityManager In View Filter</display-name>
<filter-name>OpenEntityManagerInView</filter-name>
<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>

<init-param>
<param-name>flushMode</param-name>
<param-value>AUTO</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>OpenEntityManagerInView</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<!--
Configuração do Spring
-->
<filter>
<filter-name>transactionFilter</filter-name>
<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>transactionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/conf/applicationContext.xml</param-value>
</context-param>

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!--
Tiles
-->
<context-param>
<param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG</param-name>
<param-value>/WEB-INF/conf/tiles.xml</param-value>
</context-param>
<servlet>
<servlet-name>TilesServlet</servlet-name>
<servlet-class>org.apache.tiles.web.startup.TilesServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>

<!--
Servlet que responde as requisições do tiles
-->
<servlet>
<servlet-name>TilesDispatchServlet</servlet-name>
<servlet-class>org.apache.tiles.web.util.TilesDispatchServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TilesDispatchServlet</servlet-name>
<url-pattern>*.tiles</url-pattern>
</servlet-mapping>

<!-- configura o controlador do VRaptor -->
<filter>
<filter-name>vraptor</filter-name>
<filter-class>br.com.caelum.vraptor.VRaptor</filter-class>
</filter>

<filter-mapping>
<filter-name>vraptor</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>

<!--

-->
<welcome-file-list>
<welcome-file>/jsp/index.jsp</welcome-file>
</welcome-file-list>

<error-page>
<error-code>404</error-code>
<location>/jsp/common/construction.jsp</location>
</error-page>
</web-app>

@seufagner
seufagner.com.br
"Simplicidade é a maior forma de sofisticação"
Leonardo Da vinci
[Email] [WWW]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6394
Offline

duas coisas:

vc tá registrando o OpenEntityManagerInViewFilter duas vezes... isso vai dar inconsistência na sua aplicação

e vc não precisa registrar o org.springframework.web.context.ContextLoaderListener pois o VRaptor já faz isso pra vc... ao registrar 2 vezes dá pau

[]'s

--
Caelum
www.caelum.com.br

seufagner
JavaEvangelist
[Avatar]

Membro desde: 06/05/2005 16:33:09
Mensagens: 447
Localização: Rio de Janeiro - RJ
Offline

Valeu Lucas!

Realmente dei mole com a parada do OpenEntityManagerInViewFilter .. rs

Quanto a registrar o listener do Spring, caso eu não declare recebo o seguinte erro:

java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered?
at org.springframework.web.context.support.WebApplicationContextUtils.getRequiredWebApplicationContext(WebApplicationContextUtils.java:82)
at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.lookupEntityManagerFactory(OpenEntityManagerInViewFilter.java:14
at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.lookupEntityManagerFactory(OpenEntityManagerInViewFilter.java:133)
at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:92)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:365)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:211)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
at org.mortbay.jetty.Server.handle(Server.java:285)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:502)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:821)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:513)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:20
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:37
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:36
at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)

This message was edited 1 time. Last update was at 24/01/2010 16:24:59


@seufagner
seufagner.com.br
"Simplicidade é a maior forma de sofisticação"
Leonardo Da vinci
[Email] [WWW]
seufagner
JavaEvangelist
[Avatar]

Membro desde: 06/05/2005 16:33:09
Mensagens: 447
Localização: Rio de Janeiro - RJ
Offline

Quando eu comento o OpenEntityManagerInView ele funciona. Como indicar que o applicationContext do VRaptor está cuidando disso? Acredito que ao instanciar o filtro o do VRaptor ainda não inicializou o ApplicationContext.

Outra dúvida é como informar ao VRaptor que eu terei algumas coisas definidas manualmente gerenciadas pelo Spring através de um arquivo, por exemplo, application-context.xml.

Digamos que terei alguns aspectos declarados, como proceder?


@seufagner
seufagner.com.br
"Simplicidade é a maior forma de sofisticação"
Leonardo Da vinci
[Email] [WWW]
Paulo Silveira
Administrador
[Avatar]

Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline

ola

basta ter um application-context.xml que o vraptor, através do scanning do spring, alem de procurar componentes vraptor, vai procurar componentes spring com anotacoes e tambem pelo application-context.xml

http://blog.caelum.com.br twitter: @paulo_caelum


[Email] [WWW]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6394
Offline

acredito que seja só mudar a ordem dos filtros... provavelmente colocando o OpenEntityManagerInView depois do VRaptor funcione...


--
Caelum
www.caelum.com.br

seufagner
JavaEvangelist
[Avatar]

Membro desde: 06/05/2005 16:33:09
Mensagens: 447
Localização: Rio de Janeiro - RJ
Offline

Obrigado a todos, funcionou!

O problema agora é que, mesmo declarando usuario/senha no persistence.xml e sobrescrevendo o SpringProvider e declarando no web.xml, ele não obtém a conexão, informando que não configurei tais parametros (usuario/senha).

Obs: Existe um Provider para JPA com tais utilitarios, mas preferi declará-los explicitamente.






trace:

Caused by: java.sql.SQLException: Access denied for user ''@'localhost' (using password: NO)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3536)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:346
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:917)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3974)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1282)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2142)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:773)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:352)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:154)
at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:110)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:423)

@seufagner
seufagner.com.br
"Simplicidade é a maior forma de sofisticação"
Leonardo Da vinci
[Email] [WWW]
seufagner
JavaEvangelist
[Avatar]

Membro desde: 06/05/2005 16:33:09
Mensagens: 447
Localização: Rio de Janeiro - RJ
Offline

OK. Tudo funcionando perfeitamente.

# <property name="hibernate.username" value="root" />
# <property name="hibernate.password" value="" />

Correto é:

# <property name="hibernate.connection.username" value="root" />
# <property name="hibernate.connection.password" value="" />



É minha primeira experiência com o VRaptor3 e, portanto, pretendo ir postando sobre este projeto.

Obrigado

@seufagner
seufagner.com.br
"Simplicidade é a maior forma de sofisticação"
Leonardo Da vinci
[Email] [WWW]
rponte
JavaEvangelist
[Avatar]

Membro desde: 18/02/2008 10:06:25
Mensagens: 413
Offline

Olá senhores,

Só revivendo um pouco o tópico, eu estou tendo este mesmo problema. O contexto do Spring (3.0.2) somente é levantado se eu declaro o Listener dele no web.xml. O SpringProvider do VRaptor3 parece não estar encontrando meus applicationContext*.xml (localizados no /WEB-INF/config/spring):


Se eu coloco no src com o nome de applicationContext.xml o VRaptor encontra, mas em compensação eu teria que trabalhar somente um applicationContext.xml ou estender o SpringProvider padrão.

Provavelmente alguma coisa mudou com essa versão do Spring 3.x, pois olhei o código do SpringDefaultLocator do VRaptor3 e o que ele faz é bem simples e esperado.

Enfim, se eu declaro o Listener do Spring eu tenho o problema relatado nessa thread.

Alguma dica, Jedi Masters? (-:

Rafael Ponte
http://www.rponte.com.br/
[WWW]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6394
Offline

se vc precisa trabalhar com mais de um applicationContext, vc precisa estender o SpringProvider, sobrescrevendo o método getParentApplicationContext, infelizmente...

esse problema dos dois ServletContexts já foi corrigido... vc pode baixar um snapshot com a correção:
http://oss.sonatype.org/content/repositories/snapshots/br/com/caelum/vraptor/3.1.2-SNAPSHOT/

ou esperar mais alguns dias para baixar a versão 3.1.2 final

[]'s

--
Caelum
www.caelum.com.br

rponte
JavaEvangelist
[Avatar]

Membro desde: 18/02/2008 10:06:25
Mensagens: 413
Offline

Lucas Cavalcanti wrote:se vc precisa trabalhar com mais de um applicationContext, vc precisa estender o SpringProvider, sobrescrevendo o método getParentApplicationContext, infelizmente...

esse problema dos dois ServletContexts já foi corrigido... vc pode baixar um snapshot com a correção:
http://oss.sonatype.org/content/repositories/snapshots/br/com/caelum/vraptor/3.1.2-SNAPSHOT/

ou esperar mais alguns dias para baixar a versão 3.1.2 final

[]'s


Ok Lucas,

Na verdade o que eu gostaria mesmo era evitar estender o SpringProvider para trabalhar com vários applicationContexts, mas se em último caso fosse necessário não haveria tantos problemas assim!
Estarei baixando o snapshot da vesão 3.1.2. Assim que sair a versão final eu atualizo!

Obrigado pela força!

Rafael Ponte
http://www.rponte.com.br/
[WWW]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6394
Offline

*acho* que vc pode também criar um applicationContext.xml no classpath com o conteúdo parecido com:


--
Caelum
www.caelum.com.br

rponte
JavaEvangelist
[Avatar]

Membro desde: 18/02/2008 10:06:25
Mensagens: 413
Offline

Lucas Cavalcanti wrote:*acho* que vc pode também criar um applicationContext.xml no classpath com o conteúdo parecido com:


Bacana Lucas!

Imaginei que isso fosse possível, mas não cheguei a pesquisar sobre!

Essa sintaxe acima você pegou da documentação ou você só quis passar a idéia?

Rafael Ponte
http://www.rponte.com.br/
[WWW]
 
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Ir para:   
Powered by JForum 2.1.8 © JForum Team