danieldomingues86 8 de set. de 2009
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.
vmarques 8 de set. de 2009
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 9 de set. de 2009
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 9 de set. de 2009
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 10 de set. de 2009
Não está faltando o método rollback no DaoFactory?
vmarques 10 de set. de 2009
É, 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 )
vmarques 11 de set. de 2009
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 11 de set. de 2009
Opa mas agora apareceu o problema real:
java.lang.NullPointerException
br.com.guiadesaloes.util.HibernateUtil.getSession(HibernateUtil.java:25)
mostra essa hibernateUtil
vmarques 12 de set. de 2009
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 ();
}
}
vmarques 18 de set. de 2009
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!