Stacktrace confusa com VRaptor 3

ao fazer os exercicios 6.10 da apostila fj-28 da caelum, ao que me parece, esta tudo normal, mas quando inicio o tomcat 7 recebo um erro e aseguinte stacktrace,

18/10/2010 15:27:25 org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/lib/jvm/java-6-sun-1.6.0.20/jre/lib/i386/client:/usr/lib/jvm/java-6-sun-1.6.0.20/jre/lib/i386:/usr/lib/jvm/java-6-sun-1.6.0.20/jre/…/lib/i386:/usr/lib/jvm/java-6-sun-1.6.0.20/jre/lib/i386/client:/usr/lib/jvm/java-6-sun-1.6.0.20/jre/lib/i386:/usr/lib/xulrunner-addons:/usr/lib/xulrunner-addons:/usr/java/packages/lib/i386:/lib:/usr/lib
18/10/2010 15:27:26 org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property ‘source’ to ‘org.eclipse.jst.jee.server:agenda’ did not find a matching property.
18/10/2010 15:27:26 org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property ‘source’ to ‘org.eclipse.jst.jee.server:tarefas’ did not find a matching property.
18/10/2010 15:27:26 org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property ‘source’ to ‘org.eclipse.jst.jee.server:agenda2’ did not find a matching property.
18/10/2010 15:27:26 org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property ‘source’ to ‘org.eclipse.jst.jee.server:controle-produtos’ did not find a matching property.
18/10/2010 15:27:26 org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property ‘source’ to ‘org.eclipse.jst.jee.server:fj28’ did not find a matching property.
18/10/2010 15:27:28 org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
18/10/2010 15:27:28 org.apache.coyote.ajp.AjpProtocol init
INFO: Initializing Coyote AJP/1.3 on ajp-8009
18/10/2010 15:27:28 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 5962 ms
18/10/2010 15:27:28 org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
18/10/2010 15:27:28 org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.2
18/10/2010 15:27:37 org.apache.catalina.core.StandardContext filterStart
SEVERE: Exception starting filter vraptor
java.lang.IllegalArgumentException: You don’t have any DI container jars on your classpath. Please choose one of the lib/containers jars and put it on your classpath.
at br.com.caelum.vraptor.config.BasicConfiguration.getProviderType(BasicConfiguration.java:101)
at br.com.caelum.vraptor.config.BasicConfiguration.getProvider(BasicConfiguration.java:70)
at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:103)
at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:269)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:250)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:368)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:98)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4193)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4801)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:139)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:988)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:771)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:139)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:988)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:275)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:139)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:427)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:139)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:649)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:139)
at org.apache.catalina.startup.Catalina.start(Catalina.java:585)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:415)
18/10/2010 15:27:37 org.apache.catalina.core.StandardContext startInternal
SEVERE: Error filterStart
18/10/2010 15:27:37 org.apache.catalina.core.StandardContext startInternal
SEVERE: Context [/fj28] startup failed due to previous errors
18/10/2010 15:27:37 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
SEVERE: The web application [/fj28] registered the JBDC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.

primeira linha da stacktrace:

java.lang.IllegalArgumentException: You don't have any DI container jars on your classpath. Please choose one of the lib/containers jars and put it on your classpath.

no VRaptor 3.2.0 o container de DI não vem na pasta lib/mandatory mais, pq vc precisa escolher qual dos três vai usar.

no zip do VRaptor, pegue todos os jars da pasta lib/containers/spring e coloque na sua aplicação (WEB-INF/lib)

mas tem razão, a mensagem está meio confusa mesmo =( vou mudar… tem alguma sugestão de qual é a melhor mensagem?

PS: a apostila tá um pouco desatualizada em algumas partes… o VRaptor 3.2.0 que introduziu essa mudança foi lançado há menos de 2 semanas, desculpe por isso

ah, tudo bem, compreendo, estou um pouco acostumado com struts2, e o vraptor 3.2.0 esta sendo uma boa novidade… a apostila esta realmente um pouco desatualizada, mas pra quem ainda é iniciante em javaWeb esta sendo uma boa… sobre a stacktrace… acho que esta parte “Please choose one of the lib/containers jars and put it on your classpath.” ficou um pouco no “ar” pra quem pega o bonde andando…, que este diretorio vem no download do vraptor… eu fiquei pensando muito tempo aonde estaria esta pasta… agora q voce me disse

mudei a mensagem pra :

You don’t have any DI container jars on your classpath. You can find them on vraptor-3.x.x.zip, so you must put one of the lib/containers/ jars on your classpath, where is your preferred container.

ficou melhor? sugestões pra melhorar?

ah, sim, agora ficou bem esclarecido pra qualquer iniciante, alias, achei esta iniciativa excelente, usar a opnião do usuario para melhorar o produto. isto devia ser adotado por outros projetos tambem.

ops… apos colocar os jars do spring no classpath, recebi uma stacktrace mais estranha ainda

18/10/2010 18:55:37 org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/lib/jvm/java-6-sun-1.6.0.20/jre/lib/i386/client:/usr/lib/jvm/java-6-sun-1.6.0.20/jre/lib/i386:/usr/lib/jvm/java-6-sun-1.6.0.20/jre/…/lib/i386:/usr/lib/jvm/java-6-sun-1.6.0.20/jre/lib/i386/client:/usr/lib/jvm/java-6-sun-1.6.0.20/jre/lib/i386:/usr/lib/xulrunner-addons:/usr/lib/xulrunner-addons:/usr/java/packages/lib/i386:/lib:/usr/lib
18/10/2010 18:55:39 org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property ‘source’ to ‘org.eclipse.jst.jee.server:agenda’ did not find a matching property.
18/10/2010 18:55:39 org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property ‘source’ to ‘org.eclipse.jst.jee.server:tarefas’ did not find a matching property.
18/10/2010 18:55:39 org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property ‘source’ to ‘org.eclipse.jst.jee.server:agenda2’ did not find a matching property.
18/10/2010 18:55:39 org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property ‘source’ to ‘org.eclipse.jst.jee.server:controle-produtos’ did not find a matching property.
18/10/2010 18:55:39 org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property ‘source’ to ‘org.eclipse.jst.jee.server:fj28’ did not find a matching property.
18/10/2010 18:55:42 org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
18/10/2010 18:55:42 org.apache.coyote.ajp.AjpProtocol init
INFO: Initializing Coyote AJP/1.3 on ajp-8009
18/10/2010 18:55:42 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 5712 ms
18/10/2010 18:55:42 org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
18/10/2010 18:55:42 org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.2
log4j:WARN No appenders could be found for logger (br.com.caelum.vraptor.config.BasicConfiguration).
log4j:WARN Please initialize the log4j system properly.
18/10/2010 18:55:50 org.apache.catalina.core.StandardContext filterStart
SEVERE: Exception starting filter vraptor
java.lang.NoClassDefFoundError: com/google/common/collect/MapMaker
at br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.<init>(VRaptorApplicationContext.java:69)
at br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.<init>(SpringBasedContainer.java:42)
at br.com.caelum.vraptor.ioc.spring.SpringProvider.start(SpringProvider.java:79)
at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:110)
at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:103)
at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:269)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:250)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:368)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:98)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4193)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4801)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:139)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:988)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:771)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:139)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:988)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:275)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:139)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:427)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:139)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:649)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:139)
at org.apache.catalina.startup.Catalina.start(Catalina.java:585)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:415)
Caused by: java.lang.ClassNotFoundException: com.google.common.collect.MapMaker
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1666)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1511)
… 29 more
18/10/2010 18:55:50 org.apache.catalina.core.StandardContext startInternal
SEVERE: Error filterStart
18/10/2010 18:55:50 org.apache.catalina.core.StandardContext startInternal
SEVERE: Context [/fj28] startup failed due to previous errors
18/10/2010 18:55:50 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
SEVERE: The web application [/fj28] registered the JBDC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.

vc está com o guava_r07.jar no classpath?
tem algum google-collect-xx.jar?

é. foi uma falha, o guava nao estava no classpath, agora, esse jar google-xxx. nao esta aqui nao.

aajjbb, coloque todos os jars que estão em lib/mandatory em seu classpath. Esses jars são todos obrigatórios.

é… mais uma mancada, mas agora eu ja arrumei, e tambem desisti por hoje, o eclipse helios nessa minha maravilha de 256mb de ram é uma beleza…, o tomcat demora quase 2 minutos pra subir, desse jeito ate o dalai lama perde a paciencia, talvez amanha eu continue a apostila…

ao fazer o deploy da aplicação web em um ear tenho que colocar os jars no lib do ear ? ou no web-inf/lib ?

erro

java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory

se ele está sendo usado só pela parte web, pode colocar em WEB-INF/lib… o slf4j-xxx.jar e alguma implementação, por exemplo a slf4j-log4j.-xxx.jar

eu tenho 2 projetos ejb e 1 war (futuramente terei mais 2 wars), pensei em empacotar tudo em um ear…

estou usando ejb3.1 CDI pra injetar objetos.

e os jars estão dentro do web-inf/lib mas continua dando erro

[quote=bruno.costa]ao fazer o deploy da aplicação web em um ear tenho que colocar os jars no lib do ear ? ou no web-inf/lib ?

erro

java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory [/quote]

Depende. Se a lib em questão é dependencia do EAR e filhos você deve deixar em EAR/lib. Caso o jar for dependência apenas do módulo web você coloca no WEB-INF/lib. Não se esqueça que se você usar uma lib em nível de EAR é necessário adiciona-la nos manifest dos projetos.

[quote=garcia-jj][quote=bruno.costa]ao fazer o deploy da aplicação web em um ear tenho que colocar os jars no lib do ear ? ou no web-inf/lib ?

erro

java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory [/quote]

Depende. Se a lib em questão é dependencia do EAR e filhos você deve deixar em EAR/lib. Caso o jar for dependência apenas do módulo web você coloca no WEB-INF/lib. Não se esqueça que se você usar uma lib em nível de EAR é necessário adiciona-la nos manifest dos projetos.[/quote]

foi o que eu fiz. fazendo o deploy separadamente ele funciona, ao empacotar no ear que deu problema, agora ta dando isso

java.lang.NoClassDefFoundError: Could not initialize class br.com.caelum.vraptor.VRaptor

o que aparece depois desse erro?

vc tem esses jars no classpath?

-slf4j-XXX.jar
-slf4j-log4j-xxx.jar
-log4j-xxxx.jar

Alguma lib que deveria estar dentro do EAR está dentro do WEB-INF/lib. O SLF4J e todas as bridges dele devem estar no EAR e os demais projetos têm que ter essa entrada no MANIFEST.MF.

elas devem estar no EAR mesmo se eu não utilizar nos outros projetos?

[quote=Lucas Cavalcanti]o que aparece depois desse erro?

vc tem esses jars no classpath?

-slf4j-XXX.jar
-slf4j-log4j-xxx.jar
-log4j-xxxx.jar

[/quote]

ta na web library

web-inf/lib

ta no projeto mas quando faço deploy do EAR

dentro da pasta do projeto web nao tem nada so

\WEB-INF\lib e não estão lá os jars que o eclipse mostra dentro da pasta WEB-INF\lib

ao fazer o deploy do war fora do ear ele vai com tudo

pq isso?