Ajuda com VRaptor 2 [RESOLVIDO]

10 respostas
V
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:
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)

Alguem poderia ajudar?
To sofrendo! :evil:

10 Respostas

danieldomingues86

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.

V

Obrigado por responder Daniel!

O codigo está da seguinte forma:

classe DaoInterceptor:

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;
	}
}
A classe DaoFactory:
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);
	}
}
E a classe com a logica está da seguinte forma:
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() {
		
	}
}
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 :

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.

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

Flw.

wariows

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 :

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.

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

Flw.

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

Lagaffe

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

V

É, 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...

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.<init>(DaoFactory.java:16)
	br.com.guiadesaloes.dao.DaoInterceptor.<init>(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)
V

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([email removido]), a sua pasta lib(com os .JARs) desse projeto zipada?
Fico no aguardo!

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.<init>(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)
wariows

Opa mas agora apareceu o problema real:

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

mostra essa hibernateUtil

V

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

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)

Alguem sabe como corrigir?

a classe DaoInterceptor:

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;   
    }   
}

e a logica:

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();   
    }   
}
V

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.

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();
}

}

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!

Criado 8 de setembro de 2009
Ultima resposta 18 de set. de 2009
Respostas 10
Participantes 4