Problema com vraptor - apostila fj28 - injecao d dependencia

Ola pessoal,

to seguindo a apostila fj28 da caelum e me deparei com um problema aqui.

aparentemente ta tudo certo, o @Resource e o @Component, mas mesmo assim da erro d injecao d dependencia.

erro:

[quote]HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘produtosController’: Unsatisfied dependency expressed through constructor argument with index 0 of type [br.com.goodbuy.dao.ProdutoDao]: : Error creating bean with name ‘produtoDao’: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.goodbuy.dao.ProdutoDao]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/hibernate/Session; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘produtoDao’: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.goodbuy.dao.ProdutoDao]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/hibernate/Session
[/quote]

classes:
ProdutoController

[quote]package br.com.goodbuy.controller;

import java.util.List;

import br.com.caelum.vraptor.Resource;
import br.com.goodbuy.dao.ProdutoDao;
import br.com.goodbuy.modelo.Produto;

@Resource
public class ProdutosController {

private final ProdutoDao dao;

public ProdutosController(ProdutoDao dao) {
	this.dao = dao;
}

public List<Produto> lista() {
	return dao.listaTudo();	
}

}
[/quote]

ProdutoDao

[quote]package br.com.goodbuy.dao;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;

import br.com.caelum.vraptor.ioc.Component;
import br.com.goodbuy.infra.CriadorDeSession;
import br.com.goodbuy.modelo.Produto;

@Component
public class ProdutoDao {

private final Session session;

public ProdutoDao() {
	this.session = CriadorDeSession.getSession();
	
}

public void salva(Produto produto) {
	Transaction tx = session.beginTransaction();
	session.save(produto);
	tx.commit();
}

public List<Produto> listaTudo() {
	return this.session.createCriteria(Produto.class).list();
	
}

}
[/quote]

obrigado =)

O problema é que no construtor do seu DAO está ocorrendo uma exception, tenta ver o por quê debugando a classe que cria a Session.

Sim, eu entendo que é no construtor.

Agora na session nao é pq eu ja testei ela em outras coisas eu deu tudo certo.

O pro foi nessa hora de usar o @component pro produtodao.

tá faltando o jar do hibernate
java.lang.NoClassDefFoundError: org/hibernate/Session

o hibernate3.jar tá no meu classpath…

como eu fui seguindo a apostila, eu ja havia usado o hibernate nos exemplos anteriores…

root cause:

[quote]root cause

org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘produtoDao’: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.goodbuy.dao.ProdutoDao]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/dom4j/DocumentException
[/quote]

talvez o pro teja por aqui

criador de session:

[quote]package br.com.goodbuy.infra;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class CriadorDeSession {

public static Session getSession() {
	AnnotationConfiguration configuration = new AnnotationConfiguration();
	configuration.configure();

	SessionFactory factory = configuration.buildSessionFactory();
	Session session = factory.openSession();
	return session;
}

}
[/quote]

parece que quando o produtoDao é instanciado ele precisa duma session, a qual é chamada por um método estatico do criadordesession…

enfim, se alguem tiver alguma luz a respeito poste ai =)

Está faltando o jar do dom4j…

errado, esse jar já está lá.

to com todos os jars que a apostila falou pra por, todos da pasta mandatory e todos do hibernate que o tutorial ensinou…

soh pode ta de zoa comigo =p

skaterzin, vc copiou os jars pra WEB-INF/lib?

só referenciar os jars não adianta…

se deu NoClassDefFound é falta de jar (ou bloco estático da classe q não conseguiu rodar)

jars dentro do web-inf/lib

jars dentro duma pasta lib, criada para os jars do hibernate.

Pega os jars do hibernate e coloca TUDO junto em web-inf/libs.

Pois o que acontece é que o tomcat é quem roda as suas classes e ele procura os jars naquela pasta, e somente nela.

[quote]Pega os jars do hibernate e coloca TUDO junto em web-inf/libs.

Pois o que acontece é que o tomcat é quem roda as suas classes e ele procura os jars naquela pasta, e somente nela. [/quote]

Fiz isso mas aí o tomcat nao reconhece é nada, nem o vraptor.

tá mais com cara de bloco estatico que nao roda, pq no construtor do produto dao há uma chamada de um metodo estatico do criador de session…

o problema é que a sua pasta lib está com os jars do tomcat também lá no meio… copie só o jar do hibernate e suas dependencias pra pasta WEB-INF/lib

entendo, era isso mesmo então.

porem agora q eu pus as dependencias do hibernate na lib, tá dando outra merda.

br.com.caelum.vraptor.view.ResultException: javax.servlet.ServletException: java.lang.LinkageError: loader constraint violation: when resolving interface method “javax.servlet.jsp.JspApplicationContext.getExpressionFactory()Ljavax/el/ExpressionFactory;” the class loader (instance of org/apache/jasper/servlet/JasperLoader) of the current class, org/apache/jsp/WEB_002dINF/jsp/produtos/lista_jsp, and the class loader (instance of org/apache/catalina/loader/StandardClassLoader) for resolved class, javax/servlet/jsp/JspApplicationContext, have different Class objects for the type javax/el/ExpressionFactory used in the signature

tire os jars jsp*.jar ou standard.jar

tem razão, tinha um el.jar lá.

tirei e funcionou.

Agora, sempre que eu precisar usar meus jars no tomcat eu devo colocá-los na web-inf/lib?

E obrigado a todos que me ajudaram!

não só no tomcat, em qqer servidor web java