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