Ajuda com VRaptor 2 [RESOLVIDO]

Pessoal, sou iniciante em Java e estou seguindo a apostila da Caelum FJ-28 para implementar uma aplicaçao para a faculdade. Porém estou preso na exceçao abaixo:

[code]exception

javax.servlet.ServletException: Unable to instantiate using public br.com.guiadesaloes.dao.DaoInterceptor()
org.vraptor.http.DefaultDispatcher.dispatch(DefaultDispatcher.java:55)
org.vraptor.VRaptorServlet.service(VRaptorServlet.java:48)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

org.vraptor.interceptor.InterceptorInstantiationException: Unable to instantiate using public br.com.guiadesaloes.dao.DaoInterceptor()
org.vraptor.interceptor.InterceptorDealer.poll(InterceptorDealer.java:68)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:58)
org.vraptor.interceptor.FlashScopeInterceptor.intercept(FlashScopeInterceptor.java:22)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.interceptor.RegisterAttributesInteceptor.intercept(RegisterAttributesInteceptor.java:47)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.core.VRaptorExecution.execute(VRaptorExecution.java:97)
org.vraptor.core.DefaultController.execute(DefaultController.java:46)
org.vraptor.http.DefaultDispatcher.dispatch(DefaultDispatcher.java:44)
org.vraptor.VRaptorServlet.service(VRaptorServlet.java:48)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
[/code]

Alguem poderia ajudar?
To sofrendo! :evil:

Ola,

pelo que vejo seu erro, voce deve ter tentado instanciar um DaoInterceptor em algum lugar do seu codigo certo?

Caso tenha sido isso voce nao precisa intanciar o DaoInterceptor e sim usar a anotacao @InterceptedBy(DaoInterceptor.class) na sua classe de logica.

Por favor poste o codigo para facilitar.

Flw.

Obrigado por responder Daniel!

O codigo está da seguinte forma:

classe DaoInterceptor:

[code]package br.com.guiadesaloes.dao;

import org.vraptor.Interceptor;
import org.vraptor.LogicException;
import org.vraptor.LogicFlow;
import org.vraptor.annotations.Out;
import org.vraptor.view.ViewException;

public class DaoInterceptor implements Interceptor {

private final DaoFactory factory = new DaoFactory(); 

public void intercept(LogicFlow flow) throws LogicException, ViewException {

	flow.execute();

	if (factory.hasTransaction()) {
		factory.rollback();
	}
		factory.close();
}

@Out(key="br.com.guiadesaloes.dao.DaoFactory")
public DaoFactory getFactory() {
	return factory;
}

}[/code]

A classe DaoFactory:

[code]
package br.com.guiadesaloes.dao;

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

import br.com.guiadesaloes.modelo.Salao;
import br.com.guiadesaloes.util.HibernateUtil;

public class DaoFactory {
private final Session session;
private Transaction transaction;

public DaoFactory() {
	session = HibernateUtil.getSession();	
}

public void beginTransaction() {
	this.transaction = this.session.beginTransaction();
}

public void commit() {
	this.transaction.commit();
	this.transaction = null;
}

public boolean hasTransaction() {
	return this.transaction != null;
}

public void close() {
	this.session.close();
}

public Dao<Salao> getSalaoDao() {
	return new Dao<Salao>(this.session, Salao.class);
}

}[/code]

E a classe com a logica está da seguinte forma:

[code]
package br.com.guiadesaloes.logic;

import org.vraptor.annotations.Component;
import org.vraptor.annotations.InterceptedBy;

import br.com.guiadesaloes.dao.DaoFactory;
import br.com.guiadesaloes.dao.DaoInterceptor;
import br.com.guiadesaloes.modelo.Salao;

@Component
@InterceptedBy(DaoInterceptor.class)
public class SalaoLogic {

private final DaoFactory daoFactory;

public SalaoLogic(DaoFactory daoFactory) {
	this.daoFactory = daoFactory;
}

public void adiciona(Salao salao) {
	this.daoFactory.beginTransaction();
	this.daoFactory.getSalaoDao().adiciona(salao);
	this.daoFactory.commit();
}

public void formulario() {
	
}

}[/code]

Ola,

Olha kra pelo que vejo no seu código aparentemente está tudo certo.

Andei vendo uns posts para ver se ajudava mais muitos do que eu vi estão com o mesmo problema e sem solução.

Encontrei um que pode ser alguma resposta para isso :
http://www.caelum.com.br:8070/browse/VRA-451

Ele diz o seguinte :

[quote]the exception says that your Interceptor cannot be instantiated. It usually happens if an exception is thrown during its construction.

It can happen if you connectionfactory instance has a problem, for example.[/quote]

Ou seja, o problema pode estar em quando sua connectionfactory é instanciada, de uma verificada nisso.

Flw.

[quote=danieldomingues86]Ola,

Olha kra pelo que vejo no seu código aparentemente está tudo certo.

Andei vendo uns posts para ver se ajudava mais muitos do que eu vi estão com o mesmo problema e sem solução.

Encontrei um que pode ser alguma resposta para isso :
http://www.caelum.com.br:8070/browse/VRA-451

Ele diz o seguinte :

[quote]the exception says that your Interceptor cannot be instantiated. It usually happens if an exception is thrown during its construction.

It can happen if you connectionfactory instance has a problem, for example.[/quote]

Ou seja, o problema pode estar em quando sua connectionfactory é instanciada, de uma verificada nisso.

Flw.

[/quote]

isso, dá um try/catch em:

public DaoFactory() { try{ session = HibernateUtil.getSession(); } catch (RuntimeException e) { e.printStackTrace(); } }

e vê se tá lançando alguma exception

Não está faltando o método rollback no DaoFactory?

É, realmente estava faltando o metodo rollback(), mas mesmo depois de corrigir isso contiunei com o mesmo erro.

Coloquei um try/catch na classe HibernateUtil pra ver se pegava alguma coisa mas nao achei nada… :cry:
Ta complicada a situaçao…

[code]type Exception report

message

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

exception

javax.servlet.ServletException: Unable to instantiate using public br.com.guiadesaloes.dao.DaoInterceptor()
org.vraptor.http.DefaultDispatcher.dispatch(DefaultDispatcher.java:55)
org.vraptor.VRaptorServlet.service(VRaptorServlet.java:48)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

org.vraptor.interceptor.InterceptorInstantiationException: Unable to instantiate using public br.com.guiadesaloes.dao.DaoInterceptor()
org.vraptor.interceptor.InterceptorDealer.poll(InterceptorDealer.java:68)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:58)
org.vraptor.interceptor.FlashScopeInterceptor.intercept(FlashScopeInterceptor.java:22)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.interceptor.RegisterAttributesInteceptor.intercept(RegisterAttributesInteceptor.java:47)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.core.VRaptorExecution.execute(VRaptorExecution.java:97)
org.vraptor.core.DefaultController.execute(DefaultController.java:46)
org.vraptor.http.DefaultDispatcher.dispatch(DefaultDispatcher.java:44)
org.vraptor.VRaptorServlet.service(VRaptorServlet.java:48)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

org.vraptor.component.ComponentInstantiationException: Unable to instantiate using public br.com.guiadesaloes.dao.DaoInterceptor()
org.vraptor.component.ComponentConstructor.newInstance(ComponentConstructor.java:45)
org.vraptor.interceptor.InterceptorType.newInstance(InterceptorType.java:66)
org.vraptor.interceptor.InterceptorDealer.poll(InterceptorDealer.java:62)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:58)
org.vraptor.interceptor.FlashScopeInterceptor.intercept(FlashScopeInterceptor.java:22)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.interceptor.RegisterAttributesInteceptor.intercept(RegisterAttributesInteceptor.java:47)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.core.VRaptorExecution.execute(VRaptorExecution.java:97)
org.vraptor.core.DefaultController.execute(DefaultController.java:46)
org.vraptor.http.DefaultDispatcher.dispatch(DefaultDispatcher.java:44)
org.vraptor.VRaptorServlet.service(VRaptorServlet.java:48)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

java.lang.reflect.InvocationTargetException
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
java.lang.reflect.Constructor.newInstance(Constructor.java:513)
org.vraptor.component.ComponentConstructor.newInstance(ComponentConstructor.java:43)
org.vraptor.interceptor.InterceptorType.newInstance(InterceptorType.java:66)
org.vraptor.interceptor.InterceptorDealer.poll(InterceptorDealer.java:62)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:58)
org.vraptor.interceptor.FlashScopeInterceptor.intercept(FlashScopeInterceptor.java:22)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.interceptor.RegisterAttributesInteceptor.intercept(RegisterAttributesInteceptor.java:47)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.core.VRaptorExecution.execute(VRaptorExecution.java:97)
org.vraptor.core.DefaultController.execute(DefaultController.java:46)
org.vraptor.http.DefaultDispatcher.dispatch(DefaultDispatcher.java:44)
org.vraptor.VRaptorServlet.service(VRaptorServlet.java:48)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

java.lang.NullPointerException
br.com.guiadesaloes.util.HibernateUtil.getSession(HibernateUtil.java:25)
br.com.guiadesaloes.dao.DaoFactory.(DaoFactory.java:16)
br.com.guiadesaloes.dao.DaoInterceptor.(DaoInterceptor.java:13)
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
java.lang.reflect.Constructor.newInstance(Constructor.java:513)
org.vraptor.component.ComponentConstructor.newInstance(ComponentConstructor.java:43)
org.vraptor.interceptor.InterceptorType.newInstance(InterceptorType.java:66)
org.vraptor.interceptor.InterceptorDealer.poll(InterceptorDealer.java:62)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:58)
org.vraptor.interceptor.FlashScopeInterceptor.intercept(FlashScopeInterceptor.java:22)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.interceptor.RegisterAttributesInteceptor.intercept(RegisterAttributesInteceptor.java:47)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.core.VRaptorExecution.execute(VRaptorExecution.java:97)
org.vraptor.core.DefaultController.execute(DefaultController.java:46)
org.vraptor.http.DefaultDispatcher.dispatch(DefaultDispatcher.java:44)
org.vraptor.VRaptorServlet.service(VRaptorServlet.java:48)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
[/code]

Pessoal, to tentando refazer todo o curso pra ver se consigo encontrar o erro.
Pode ser algum problema com os .JARs do projeto?
Daniel, teria como me enviar por email(vitormarques.sa@gmail.com), a sua pasta lib(com os .JARs) desse projeto zipada?
Fico no aguardo!

[code]type Exception report

message

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

exception

javax.servlet.ServletException: Could not initialize class br.com.guiadesaloes.util.HibernateUtil
org.vraptor.http.DefaultDispatcher.dispatch(DefaultDispatcher.java:69)
org.vraptor.VRaptorServlet.service(VRaptorServlet.java:48)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

java.lang.NoClassDefFoundError: Could not initialize class br.com.guiadesaloes.util.HibernateUtil
br.com.guiadesaloes.dao.DaoFactory.(DaoFactory.java:14)
br.com.guiadesaloes.logic.UsuarioLogic.adiciona(UsuarioLogic.java:12)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.vraptor.component.DefaultLogicMethod.execute(DefaultLogicMethod.java:61)
org.vraptor.interceptor.ExecuteLogicInterceptor.intercept(ExecuteLogicInterceptor.java:32)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.interceptor.SettingAndValidationInterceptor.intercept(SettingAndValidationInterceptor.java:130)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.interceptor.InjectionInterceptor.intercept(InjectionInterceptor.java:41)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.interceptor.ComponentLookupInterceptor.intercept(ComponentLookupInterceptor.java:57)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.interceptor.FlashScopeInterceptor.intercept(FlashScopeInterceptor.java:22)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.interceptor.RegisterAttributesInteceptor.intercept(RegisterAttributesInteceptor.java:47)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.core.VRaptorExecution.execute(VRaptorExecution.java:97)
org.vraptor.core.DefaultController.execute(DefaultController.java:46)
org.vraptor.http.DefaultDispatcher.dispatch(DefaultDispatcher.java:44)
org.vraptor.VRaptorServlet.service(VRaptorServlet.java:48)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
[/code]

Opa mas agora apareceu o problema real:

java.lang.NullPointerException
br.com.guiadesaloes.util.HibernateUtil.getSession(HibernateUtil.java:25)

mostra essa hibernateUtil

Pessoal, eu continuei pesquisando e tentando acabar com o erro. E agora to com essa exception aqui apenas

[code]type Exception report

message

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

exception

javax.servlet.ServletException: Servlet execution threw an exception

root cause

java.lang.NoClassDefFoundError: Could not initialize class br.com.guiadesaloes.dao.DaoInterceptor
sun.reflect.GeneratedConstructorAccessor5.newInstance(Unknown Source)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
java.lang.reflect.Constructor.newInstance(Constructor.java:513)
org.vraptor.component.ComponentConstructor.newInstance(ComponentConstructor.java:43)
org.vraptor.interceptor.InterceptorType.newInstance(InterceptorType.java:66)
org.vraptor.interceptor.InterceptorDealer.poll(InterceptorDealer.java:62)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:58)
org.vraptor.interceptor.FlashScopeInterceptor.intercept(FlashScopeInterceptor.java:22)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.interceptor.RegisterAttributesInteceptor.intercept(RegisterAttributesInteceptor.java:47)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.core.VRaptorExecution.execute(VRaptorExecution.java:97)
org.vraptor.core.DefaultController.execute(DefaultController.java:46)
org.vraptor.http.DefaultDispatcher.dispatch(DefaultDispatcher.java:44)
org.vraptor.VRaptorServlet.service(VRaptorServlet.java:48)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
[/code]

Alguem sabe como corrigir?

a classe DaoInterceptor:

[code]package br.com.guiadesaloes.dao;

import org.vraptor.Interceptor;
import org.vraptor.LogicException;
import org.vraptor.LogicFlow;
import org.vraptor.annotations.Out;
import org.vraptor.view.ViewException;

import br.com.guiadesaloes.dao.DaoFactory;

public class DaoInterceptor implements Interceptor {

private static DaoFactory factory = new DaoFactory();   
   
public void intercept (LogicFlow flow) throws LogicException, ViewException {           
       
    //executa a logica   
    flow.execute();   
       
    //se sobrou transação sem comitar, faz um rollback   
    if(factory.hasTransaction()) {   
        factory.rollback();   
    }   
       
    factory.close();   
}   

@Out(key="br.com.guiadesaloes.dao.DaoFactory")   
public static DaoFactory getFactory() {   
    return factory;   
}   

} [/code]

e a logica:

[code]package br.com.guiadesaloes.logic;

import java.util.List;

import org.vraptor.annotations.Component;
import org.vraptor.annotations.InterceptedBy;

import br.com.guiadesaloes.dao.DaoFactory;
import br.com.guiadesaloes.modelo.Usuario;
import br.com.guiadesaloes.dao.DaoInterceptor;

@Component
@InterceptedBy(DaoInterceptor.class)
public class UsuarioLogic {

private final DaoFactory daoFactory;   
private List<Usuario> usuarios;   
   
public UsuarioLogic () {   
    this.daoFactory = DaoInterceptor.getFactory();   
}   
   
public void formulario() {   
}   
   
public void adiciona (Usuario usuario) {   
    this.daoFactory.beginTransaction();   
    this.daoFactory.getUsuarioDao().adiciona(usuario);   
    this.daoFactory.commit();   
}  

public void lista() {   
    usuarios = this.daoFactory.getUsuarioDao().listaTudo();   
}   
   
public List<Usuario> getUsuarios() {   
    return usuarios;   
}   
   
public void remove(Usuario usuario) {   
    this.daoFactory.beginTransaction();   
    this.daoFactory.getUsuarioDao().remove(usuario);   
    this.daoFactory.commit();   
}   

}

[/code]

Pessoal consegui resolver o problema.
Nao sei se da melhor forma, mas enfim, ta funcionando.
Eu troquei o arquivo de configuração do Hibernate (hibernate.cfg.xml) pelo arquivo .properties que já vem com o projeto. E mapeei todas os beans dentro da propria HibernateUtil.

[code]public class HibernateUtil {

private static SessionFactory factory;

static {
AnnotationConfiguration conf = new AnnotationConfiguration();
conf.AddAnnotatedClass(MinhaClasse.class);
conf.AddAnnotatedClass(MinhaClasse.class);
factory = conf.buildSessionFactory();
}

public static Session getSession() {
return factory.openSession();
}

}[/code]

Pelo que parecia, o Servlet Container nao estava conseguindo ler o hibernate.cfg.xml…
Se alguem tiver o mesmo problema, dessa forma funciona!
obrigado pela ajuda!