Re:Error creating bean with name 'br.com.caelum.vraptor.http.EncodingHandlerFactory':

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

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

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

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

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):

<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/config/spring/applicationContext*.xml</param-value> </context-param>
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? (-:

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

[quote=Lucas Cavalcanti]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[/quote]

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!

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

<beans>
<import resource="/WEB-INF/config/spring/applicationContext.xml"/>
<import resource="/WEB-INF/config/spring/applicationContext-abc.xml"/>
<import resource="/WEB-INF/config/spring/applicationContext-def.xml"/>
</beans>

[quote=Lucas Cavalcanti]acho que vc pode também criar um applicationContext.xml no classpath com o conteúdo parecido com:

<beans> <import resource="/WEB-INF/config/spring/applicationContext.xml"/> <import resource="/WEB-INF/config/spring/applicationContext-abc.xml"/> <import resource="/WEB-INF/config/spring/applicationContext-def.xml"/> </beans> [/quote]
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?

foi o primeiro hit do google, veio de um forum… mas parece que a sintaxe é essa mesmo…

Lucas,

O VRaptor3 ainda continua não levantando o contexto do Spring 3.x na inicialização do servidor, contudo ao declarar o Listener do Spring no web.xml a aplicação funciona normalmente sem problemas. Aquele erro do ServletContext foi resolvido!

Se puder explicar, esse erro estava relacionado a exatamente o que?

de qqer forma, quando vc usa um spring listener, essa linha que está no DefaultSpringLocator deveria achar o contexto que o listener abriu:

ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(servletContext);

será q isso não funciona no spring 3?

o erro do ServletContext era pq o vraptor registrava uma instancia dele no container sem ver se já existia um registrado… agora ele verifica…

[quote=Lucas Cavalcanti]de qqer forma, quando vc usa um spring listener, essa linha que está no DefaultSpringLocator deveria achar o contexto que o listener abriu:

ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(servletContext);

será q isso não funciona no spring 3?[/quote]
Foi exatamente isso que pensei! Provavelmente alguma coisa mudou nesta nova versão.

Entendi, valeu pela força e pelo tempo!

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:58)
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:88)
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:208)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:378)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:368)
at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)

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"?>


ticred

<!-- 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>

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:148)
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:208)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:378)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:368)
at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)

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?

Obrigado a todos, funcionou! :slight_smile:

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.

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
                                 http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
	version="1.0">
	<persistence-unit name="default"
		transaction-type="RESOURCE_LOCAL">
		<properties>
			<!-- Scan for annotated classes and Hibernate mapping XML files -->
			<property value="class, hbm" name="hibernate.archive.autodetection" />
			<property name="hibernate.archive.autodetection" value="class" />

			<property name="hibernate.show_sql" value="false" />
			<property name="hibernate.format_sql" value="false" />
			<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
			<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/juricred" />
			<property name="hibernate.username" value="root" />
			<property name="hibernate.password" value="" />
			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
			<property name="hibernate.hbm2ddl.auto" value="update" />
		</properties>
	</persistence-unit>
</persistence>
public class VRaptorSpringProvider extends SpringProvider {

	/**
	 * 
	 */
	@Override
	protected void registerCustomComponents(ComponentRegistry registry) {
		registry.register(EntityManagerCreator.class, EntityManagerCreator.class);
		registry.register(EntityManagerFactoryCreator.class, EntityManagerFactoryCreator.class);
		registry.register(JPATransactionInterceptor.class, JPATransactionInterceptor.class);
	}
}

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:3468)
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.(ConnectionImpl.java:773)
at com.mysql.jdbc.JDBC4Connection.(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)