VRaptor3 - VRaptor Blank project - Erro de iniciante

16 respostas
paulopatto

Bom dia.

Baixei o .pdf de tutorial do VRaptor3 mais o projeto indicado (VRaptor-blank-project), mas não sei o que eu devo estar fazendo de errado. No tutorial vem com o seguinte trecho originalmente no web.xml:
...
<context-param>
    <param-name>br.com.caelum.vraptor.packages</param-name>
    <param-value>br.com.caelum.vraptor.blank</param-value>
</context-param>
...
Assim temos a action index() vinda da classe br.com.caelum.vraptor.blank.IndexController que possui o seguinte código:
package br.com.caelum.vraptor.blank;

import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;

@Resource
public class IndexController {

	@Path("/")
	public void index() { }

}

Humm bem ai funciona bem, me aparece o It works! beleza, porem eu quero trabalhar com a seguinte hierarquia:

app.controladores - Para as minhas classes de controle.
app.modelos - Para as minhas classes de entidade.
app.mocks - Apenas classe que vão representar o banco de dados (alimentar com dados para as entidades).

Bem como estava dando erro para a action Produtos, eu fiz o seguinte. 1 - Mudei a classe br.com.caelum.vraptor.blank.IndexController para app.controladores.IndexController. 2 - Modifiquei o web.xml para
<context-param>
    <param-name>br.com.caelum.vraptor.packages</param-name>
    <param-value>app.controladores</param-value>
</context-param>
3 - Reiniciei o tomcat e ... erro! :(

Bem como medida já tentei em value com apenas app e já tentei mudar o param-name para app.controladores.packages, app.packages, e não obtive sucesso. Alguem que use o VRaptor 3 sabe qual a cabaceira que eu estou cometendo?

16 Respostas

Paulo_Silveira

Ola Paulo!

Pode postar a stacktrace do erro para nos?

abracos!

paulopatto

Olá Paulo, bom dia.

Não tenho um stacktrace até por que eu acho que eu devo estar errando configuração, acho que não é um bug e sim um erro ou com rotas ou com o meu xml, pois o erro é um 404, como se ele não acha-se a view.

Seguem as imagens e dai podemos ver o que eu devo estar fazendo de errado. Eu fui mudando o param-name e o param-value, para ver se eu coneguia alguma adequação.

O controller é o mesmo original do IndexController por enquanto. Só preciso ver onde eu estou errando.

package app.controllers;

import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;

@Resource
public class IndexController {

	@Path("/")
	public void index() { }

}

Obrigado e um bom dia.



G

paulopatto, sua aplicação respondo pelo URI /VRaptor3 ou /vraptor?

Mesmo sendo um erro 404 você tem algumas mensagens no console. É sempre ideal enviar para cá para entendermos o que acontece.

Abraços

Lucas_Cavalcanti

o erro é que você tem que colocar no contex-param o pacote base da sua aplicação: todas as suas classes devem estar abaixo desse pacote…

basta mudar para:

<context-param>
    <param-name>br.com.caelum.vraptor.packages</param-name>
    <param-value>app</param-value>
</context-param>

[]'s

Lucas_Cavalcanti

e como o garcia-jj falou, você precisa usar o context-path que vc configurou…

o padrão do blank-project era:

http://localhost:8080/vraptor-blank-project

paulopatto

Lucas o context-path está correto sim. E mesmo colocando o app (que foi o primeiro que eu havia colocado), mas nada.

Lucas_Cavalcanti

qual é o context-path da sua aplicação?

se vc está usando o eclipse com WTP:

botão direito no projeto >> Properties >> Web Project Settings >> Context Root

dá uma olhada no que está nesse context root… se estiver escrito banana você vai acessar:

http://localhost:8080/banana

e deve funcionar
[]'s

paulopatto

Sim o context-path está correto sim.

paulopatto

Seguem aqui algumas telas a mais.

Uma outra dúvida, se eu postar o pacote root do meu projeto no caso app, o vraptor vai entrar em pacote por pacote para encontrar as classes anotadas como resource? O Certo não seria indicar apenas o pacote com as classes de controles?






Lucas_Cavalcanti

até os maiúsculos e minúsculos?

/vraptor3 é diferente de /VRaptor3

faça a seguinte:

tenta acessar:

http://localhost:8080/vraptor-blank-project

tenta dar clean no projeto, e dar clean no tomcat tb (botão direito clean na aba servers)

isso deve estar acontecendo pq você renomeou o projeto, mas o eclipse não mudou as configurações dele…

paulopatto

Não lucas problema por causa de nome do contexto tenho certeza que não é pois eu modificp a classe index_controller e o web xml e reinicio o tomcat e ele funciona conforme imagem.




Lucas_Cavalcanti

ok, no log do tomcat apareceu alguma coisa?

o final dele deve ter algo como:

log4j:WARN No appenders could be found for logger (br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext).
log4j:WARN Please initialize the log4j system properly.
Oct 28, 2009 2:50:52 PM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080

se você não tiver habilitado o log4j, ou o milhares de logs do vraptor caso o log4j esteja habilitado…

se estiver aparecendo logs, ve se deu alguma exception…

crie um arquivo chamado log4j.xml na pasta src/ com esse conteúdo para ativar o log do vraptor:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
        
        <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
                <layout class="org.apache.log4j.PatternLayout">
                        <param name="ConversionPattern" 
                                value="%d{HH:mm:ss,SSS} %5p [%-20c{1}] %m%n"/>
                </layout>
        </appender>

        <category name="br.com.caelum.vraptor">
	        <priority value="DEBUG" />
	        <appender-ref ref="stdout" />
	    </category>
	    <category name="br.com.caelum.vraptor.interceptor.multipart">
	        <priority value="ERROR" />
	        <appender-ref ref="stdout" />
	    </category>

        <category name="org.hibernate">
                <priority value="WARN" />
                <appender-ref ref="stdout" />
        </category>

</log4j:configuration>
Paulo_Silveira

estou curiosissimo para descobrir o problema, por que tudo parece certo!! com certeza é algum detalhe que nao estamos prestando atencao

G

Cara, mas que coisa do demo isso, hein?! Tá parecendo um outro thread que estou acompanhado de um magrão que não consegue subir o hibernate. Olhando tudo parece ok, mas simplesmente não vai.

O Lucas indicou assim porque o vraptor faz scan não apenas dos controller, mas de interceptors, converters… enfim, muito mais coisa. No meu caso eu possuo o pacote esim.web, onde tudo que é web está lá. Assim indico o vraptor para fazer scan nesse pacote.

Faça um ajuste no seu log4j para entendermos o erro.

Abraços

paulopatto

Pessoal, depois de uns dias sem mexer novamente no VRaptor, voltei e ai tentei resolver. Bem achei o problema, o eclipse aparentemente não compilava as novas classes que eu fazia.

Mesmo depois de mudar o IndexController de pacote e apagar o .class da pasta build, o eclipse ia e compilava ele lá.

Retirei o build.xml do ant, ai ele não compilava mais...

Hummm... Bem como não sei mexer bem com o eclipse, gostaria que tive-se algo como o build do netbeans, bem fiz o simples, usei o IDE que eu conheço, usei o netbeans e pronto foi.

Bem tem outro erro agora como esse:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'produtosController' defined in file [C:\dev\www\vraptor-blank-project-3.0.1\build\web\WEB-INF\classes\app\controllers\ProdutosController.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [app.models.Produto]: : No unique bean of type [app.models.Produto] is defined: Unsatisfied dependency of type [class app.models.Produto]: expected at least 1 matching bean; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [app.models.Produto] is defined: Unsatisfied dependency of type [class app.models.Produto]: expected at least 1 matching bean
	org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:591)
	org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:193)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:925)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:835)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:440)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
	java.security.AccessController.doPrivileged(Native Method)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
	org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:302)
	org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
	org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:308)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:297)
	org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:942)
	org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:224)
	br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.getBean(VRaptorApplicationContext.java:209)
	br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:61)
	br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:41)
	br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:40)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	br.com.caelum.vraptor.interceptor.multipart.MultipartInterceptor.intercept(MultipartInterceptor.java:74)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:51)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:60)
	br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
	br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:55)
	br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
root cause

org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [app.models.Produto] is defined: Unsatisfied dependency of type [class app.models.Produto]: expected at least 1 matching bean
	org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:613)
	org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:622)
	org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:584)
	org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:193)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:925)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:835)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:440)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
	java.security.AccessController.doPrivileged(Native Method)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
	org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:302)
	org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
	org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:308)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:297)
	org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:942)
	org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:224)
	br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.getBean(VRaptorApplicationContext.java:209)
	br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:61)
	br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:41)
	br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:40)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	br.com.caelum.vraptor.interceptor.multipart.MultipartInterceptor.intercept(MultipartInterceptor.java:74)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:51)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:60)
	br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
	br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:55)
	br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

Bem mas esse eu vou tentar resolver, para poder me sujar um pouco de barro né :D

Valeu pessoal pelo help e desculpe o mal entendido.

EDIT 1:

Bem, mesmo conhecendo melhor o netbeans tenho de admitir que ele não é pesado, ele é muiiito, mas muiiitoo pesado, e minhas máquina não é lenta, ela é muiiiiiiiitoooo, mas muiiiitooo lentaaaa. Bem sendo assim, será que alguem sabe por que deste probleminha com o eclipse 3.5 e como eu poderia resolver?

Obrigado.

G

Esse erro indica que não foi encontrado pelo spring o bean app.models.Produto para injeção. Note a string " expected at least 1 matching bean".

Criado 28 de outubro de 2009
Ultima resposta 3 de nov. de 2009
Respostas 16
Participantes 4