Problemas com exemplo de Loja Virtual VRaptor da Caelum

26 respostas
W

Olá pessoal,

Estou tentando fazer o exemplo de loja virtual da apostila Caelum
http://www.guj.com.br/posts/list/58662.java

Estou tendo a seguinte mensagem:

javax.servlet.ServletException: Unable to instantiate using public br.com.caelum.lojavirtual.loja.DaoInterceptor()
	org.vraptor.VRaptorServlet.service(VRaptorServlet.java:68)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

Segue abaixo:
DaoInterceptor

public class DaoInterceptor implements Interceptor {
	// private final DaoFactory factory = new DaoFactory();
	private final DaoFactory factory = new DaoFactory();


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

	public void intercept(LogicFlow flow) throws LogicException, ViewException {
		// executa a logica
		flow.execute();
		// se sobrou transacao sem comitar, faz rollback
		if (factory.hasTransaction()) {
			factory.rollback();
		}
		factory.close();
	}
}

DaoFactory

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 rollback() {
		this.transaction.rollback();
		this.transaction = null;
	}

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

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

UsuarioLogic

@Component
@InterceptedBy(DaoInterceptor.class)
public class UsuarioLogic {
	private final DaoFactory daoFactory;

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


	public void adiciona(Usuario usuario) {
		this.daoFactory.beginTransaction();
		this.daoFactory.getUsuarioDao().adiciona(usuario);
		this.daoFactory.commit();
	}

	public void formulario() {
	}
}

Alguem pode me ajudar?
Grato,
Wallfox

26 Respostas

A

cara tenta da um restart no tomcat!

W

Já fiz isso várias vezes.

Valew

fsquadro

Wallfox,

Pelo que estou percebendo estou com problema no mesmo pedaço da apostila que você, porém o meu código compila e tudo tranquilo, porém quando vou abrir a página (http://localhost:8080/loja/usuario.formulario.logic)
dá o seguinte erro:

Você chegou a passar por isso? Você conseguiu adicionar algum usuário via web?

Obrigado.

sergiolopes

fsquadro,

voce anotou sua classe com o @Component?
o nome do componente é usuario mesmo? (@Component(“usuario”))
deu restart no tomcat? (o vraptor só varre automaticamente as classes no init… se quiser o reload automatico, tem que configurar no xml)

W

fsquadro,

Com as dicas do sergiousp você conseguiu resolver o seu problema?
O meu esta anotado com @Component mas continua com o mesmo problema.
Vamos tentar resolver os problemas todos juntos até terminar a apostila.

Grato,
Wallfox

fsquadro

Wallfox,

Não consegui não. Ainda continua o mesmo erro.

urubatan

vocês leram a apostila ou só tentaram rodar o exemplo?

fsquadro

Urubatan,

Eu estou lendo a apostila e fazendo os “exercicios”, fazendo o passo a passo para criar a aplicação, partindo do zero.

W

Me too!

M

Wallfox:
fsquadro,

Com as dicas do sergiousp você conseguiu resolver o seu problema?
O meu esta anotado com @Component mas continua com o mesmo problema.
Vamos tentar resolver os problemas todos juntos até terminar a apostila.

Grato,
Wallfox

Substitua:
@Component

Por:
@Component (“usuario”)

W

marceloplis:
Wallfox:
fsquadro,

Com as dicas do sergiousp você conseguiu resolver o seu problema?
O meu esta anotado com @Component mas continua com o mesmo problema.
Vamos tentar resolver os problemas todos juntos até terminar a apostila.

Grato,
Wallfox

Substitua:
@Component

Por:
@Component (“usuario”)

Então, já havia testado utilisando @Component(“usuario”) e o problema foi o mesmo.
Acho que o jeito vai ser gastar algumas horas do meu fds nisso… :roll:

Obrigado,
Wallfox

fabim

também tive o mesmo problema…
gera a mesma exception…

fsquadro

Fábio,

E eu ainda não consegui resolver.

Já refiz tudo umas 3x, e nada, sempre o mesmo problema, eu acredito que esteja faltando algum passo na apostila.

fabim

tenso…

ja to no jsf mano… tem mais material e mais gente usando…

von.juliano

Substitua

private final DaoFactory daoFactory;Por

@In private DaoFactory daoFactory;
Acho que está faltando, a annotation @In

fsquadro

Juliano,

Alterei e continua o mesmo erro.
Assim, todas as alterações que fiz, no Dao e DaoFactory, estão funcionando, pois quando rodo minha classe TestaUsuario, ele grava as informações no banco, sem problemas, porém quando roda a aplicação (Tomcat), ele não encontra o arquivo da página.

Vá revisei todo o código, e não acho o problema.

Está faltando alguma coisa, para ele localizar o arquivo (JSP). Agora, o q?

Fabio_Kung

Olá Wallfox,

Wallfox:
Estou tendo a seguinte mensagem:

javax.servlet.ServletException: Unable to instantiate using public br.com.caelum.lojavirtual.loja.DaoInterceptor() org.vraptor.VRaptorServlet.service(VRaptorServlet.java:68) javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


O VRaptor não está conseguindo instanciar o seu Interceptor!

Wallfox:
public class DaoInterceptor implements Interceptor { // private final DaoFactory factory = new DaoFactory(); private final DaoFactory factory = new DaoFactory(); ... }

Perceba que um quando ele é instanciado, uma DaoFactory é criada.

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

E quando a DaoFactory é criada, uma Session do Hibernate é aberta. O que me leva a crer que há algum problema na hora de abrir a Session do Hibernate.

O Banco está iniciado? Confira se está tudo certo no hibernate.cfg.xml. Tente iniciar uma Session em uma classe com main(), comum.

Se não funcionar, poste o resto da mensagem da Exception do seu console.

Brigati

pessoal estou iniciando agora com hibernate… estou com esse problema nessas classes… vc podiam me dar uma dica ???

class gerabanco.java

package banco;

import org.hibernate.cfg.AnnotationConfiguration;

import org.hibernate.cfg.Configuration;

import org.hibernate.tool.hbm2ddl.SchemaExport;

import org.firebirdsql.jdbc.FBSQLException;

public class GeraBanco {

public static void main(String args[]) throws FBSQLException{
	
	Configuration conf = new AnnotationConfiguration();
	conf.configure();
	SchemaExport se = new SchemaExport(conf);
	se.create(true, true);

	
}

}

aparece a mensagem abaixo no console

20:07:50,968  INFO DriverManagerConnectionProvider:83 - connection properties: {user=sysdba, password=masterkey}

20:07:50,968 DEBUG DriverManagerConnectionProvider:93 - total checked-out connections: 0

20:07:50,968 DEBUG DriverManagerConnectionProvider:109 - opening new JDBC connection

20:07:51,828 ERROR SchemaExport:202 - schema export unsuccessful

org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544344. I/O error for file %.0s"CreateFile (open)"

null

Error while trying to open file

null

Reason: I/O error for file %.0s"CreateFile (open)"

null

Error while trying to open file

null

at org.firebirdsql.jdbc.FBDataSource.getConnection(FBDataSource.java:122)

at org.firebirdsql.jdbc.FBDriver.connect(FBDriver.java:131)

at java.sql.DriverManager.getConnection(Unknown Source)

at java.sql.DriverManager.getConnection(Unknown Source)

at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:110)

at org.hibernate.tool.hbm2ddl.ManagedProviderConnectionHelper.prepare(ManagedProviderConnectionHelper.java:28)

at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:180)

at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:133)

at banco.GeraBanco.main(GeraBanco.java:15)

at

org.firebirdsql.gds.GDSException: I/O error for file %.0s"CreateFile (open)"

null

Error while trying to open file

null

at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.readStatusVector(AbstractJavaGDSImpl.java:2124)

at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.receiveResponse(AbstractJavaGDSImpl.java:2074)

at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.internalAttachDatabase(AbstractJavaGDSImpl.java:414)

at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.iscAttachDatabase(AbstractJavaGDSImpl.java:370)

at org.firebirdsql.jca.FBManagedConnection.(FBManagedConnection.java:89)

at org.firebirdsql.jca.FBManagedConnectionFactory.createManagedConnection(FBManagedConnectionFactory.java:470)

at org.firebirdsql.jca.FBStandAloneConnectionManager.allocateConnection(FBStandAloneConnectionManager.java:69)

at org.firebirdsql.jdbc.FBDataSource.getConnection(FBDataSource.java:119)

at org.firebirdsql.jdbc.FBDriver.connect(FBDriver.java:131)

at java.sql.DriverManager.getConnection(Unknown Source)

at java.sql.DriverManager.getConnection(Unknown Source)

at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:110)

at org.hibernate.tool.hbm2ddl.ManagedProviderConnectionHelper.prepare(ManagedProviderConnectionHelper.java:28)

at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:180)

at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:133)

at banco.GeraBanco.main(GeraBanco.java:15)

e class

Brigati

pessoal estou iniciando agora com hibernate… estou com esse problema nessas classes… vc podiam me dar uma dica ???

class gerabanco.java

package banco;

import org.hibernate.cfg.AnnotationConfiguration;

import org.hibernate.cfg.Configuration;

import org.hibernate.tool.hbm2ddl.SchemaExport;

import org.firebirdsql.jdbc.FBSQLException;

public class GeraBanco {

public static void main(String args[]) throws FBSQLException{
	
	Configuration conf = new AnnotationConfiguration();
	conf.configure();
	SchemaExport se = new SchemaExport(conf);
	se.create(true, true);

	
}

}

aparece a mensagem abaixo no console

20:07:50,968  INFO DriverManagerConnectionProvider:83 - connection properties: {user=sysdba, password=masterkey}

20:07:50,968 DEBUG DriverManagerConnectionProvider:93 - total checked-out connections: 0

20:07:50,968 DEBUG DriverManagerConnectionProvider:109 - opening new JDBC connection

20:07:51,828 ERROR SchemaExport:202 - schema export unsuccessful

org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544344. I/O error for file %.0s"CreateFile (open)"

null

Error while trying to open file

null

Reason: I/O error for file %.0s"CreateFile (open)"

null

Error while trying to open file

null

at org.firebirdsql.jdbc.FBDataSource.getConnection(FBDataSource.java:122)

at org.firebirdsql.jdbc.FBDriver.connect(FBDriver.java:131)

at java.sql.DriverManager.getConnection(Unknown Source)

at java.sql.DriverManager.getConnection(Unknown Source)

at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:110)

at org.hibernate.tool.hbm2ddl.ManagedProviderConnectionHelper.prepare(ManagedProviderConnectionHelper.java:28)

at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:180)

at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:133)

at banco.GeraBanco.main(GeraBanco.java:15)

at

org.firebirdsql.gds.GDSException: I/O error for file %.0s"CreateFile (open)"

null

Error while trying to open file

null

at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.readStatusVector(AbstractJavaGDSImpl.java:2124)

at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.receiveResponse(AbstractJavaGDSImpl.java:2074)

at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.internalAttachDatabase(AbstractJavaGDSImpl.java:414)

at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.iscAttachDatabase(AbstractJavaGDSImpl.java:370)

at org.firebirdsql.jca.FBManagedConnection.(FBManagedConnection.java:89)

at org.firebirdsql.jca.FBManagedConnectionFactory.createManagedConnection(FBManagedConnectionFactory.java:470)

at org.firebirdsql.jca.FBStandAloneConnectionManager.allocateConnection(FBStandAloneConnectionManager.java:69)

at org.firebirdsql.jdbc.FBDataSource.getConnection(FBDataSource.java:119)

at org.firebirdsql.jdbc.FBDriver.connect(FBDriver.java:131)

at java.sql.DriverManager.getConnection(Unknown Source)

at java.sql.DriverManager.getConnection(Unknown Source)

at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:110)

at org.hibernate.tool.hbm2ddl.ManagedProviderConnectionHelper.prepare(ManagedProviderConnectionHelper.java:28)

at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:180)

at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:133)

at banco.GeraBanco.main(GeraBanco.java:15)

obrigado…

fabim

Fabio Kung:
Olá Wallfox,

Wallfox:
Estou tendo a seguinte mensagem:

javax.servlet.ServletException: Unable to instantiate using public br.com.caelum.lojavirtual.loja.DaoInterceptor() org.vraptor.VRaptorServlet.service(VRaptorServlet.java:68) javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


O VRaptor não está conseguindo instanciar o seu Interceptor!

Wallfox:
public class DaoInterceptor implements Interceptor { // private final DaoFactory factory = new DaoFactory(); private final DaoFactory factory = new DaoFactory(); ... }

Perceba que um quando ele é instanciado, uma DaoFactory é criada.

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

E quando a DaoFactory é criada, uma Session do Hibernate é aberta. O que me leva a crer que há algum problema na hora de abrir a Session do Hibernate.

O Banco está iniciado? Confira se está tudo certo no hibernate.cfg.xml. Tente iniciar uma Session em uma classe com main(), comum.

Se não funcionar, poste o resto da mensagem da Exception do seu console.

fabio (xará)…

o problema “aparenta” ser que nao esta conseguindo instanciar o interceptor, mas nao é realmente essa a causa do problema eu suponho… aqui estava dando o mesmo erro, mas esse é o erro que aparece no nivel mais alto do stack trace… se olhar par baixo, vai ver que tem algo que esta acontecendo de errado, que nao permite instanciar o interceptor

no meu caso, era pau no arquivo de conf do hibernate… tinha essa mesma exceção, como primeira, e logo abaixo a exceção do hibernate… corrigi meu conf e fico tudo blz :wink:

W

Fabio Kung:
Olá Wallfox,

Wallfox:
Estou tendo a seguinte mensagem:

javax.servlet.ServletException: Unable to instantiate using public br.com.caelum.lojavirtual.loja.DaoInterceptor() org.vraptor.VRaptorServlet.service(VRaptorServlet.java:68) javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


O VRaptor não está conseguindo instanciar o seu Interceptor!

Wallfox:
public class DaoInterceptor implements Interceptor { // private final DaoFactory factory = new DaoFactory(); private final DaoFactory factory = new DaoFactory(); ... }

Perceba que um quando ele é instanciado, uma DaoFactory é criada.

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

E quando a DaoFactory é criada, uma Session do Hibernate é aberta. O que me leva a crer que há algum problema na hora de abrir a Session do Hibernate.

O Banco está iniciado? Confira se está tudo certo no hibernate.cfg.xml. Tente iniciar uma Session em uma classe com main(), comum.

Se não funcionar, poste o resto da mensagem da Exception do seu console.

Olá Fabio,

Eu nem havia visto a resposta. Eu ainda não fiz mais nenhum teste, assim que eu tiver um tempo (provavelmente no fds) eu tentarei novamente, ai eu posto a resposta.

Grato,
Wallfox

R

Só para constar…
Alguns ai estão esquecendo de colocar o Default output folder: lojavirtual/web/WEBINF/classes

Qualquer dúvida olhar na apostila, essa configuração esta no 13.8 - Iniciando o projeto

W

RedRede:
Só para constar…
Alguns ai estão esquecendo de colocar o Default output folder: lojavirtual/web/WEBINF/classes

Qualquer dúvida olhar na apostila, essa configuração esta no 13.8 - Iniciando o projeto

RedRede,

Como faço para alterar o output folder com o projeto já criado? É possível?

Grato,
Wallfox

juniorsatanas

http://www.vraptor.com.br/forum/posts/list/272.page

W

Estava com o mesmo problema.

Use o compilador 5.0 ao invés de 1.4.

C

para o fsquadro

Pode ser problema de versoes do vraptor.

Experimenta a versao vraptor-2.3.3.jar e o log4j-1.2.12.jar

Criado 23 de maio de 2007
Ultima resposta 28 de nov. de 2008
Respostas 26
Participantes 14