Error Criando Usuário[RESOLVIDO]

galera já bem no finalzinho da apostila…a partir da página 113-Criando usuário…
coloquei todas as informações seguintes,mas esta dando o seguinte erro:

Error creating bean with name ‘criadorDeSessionFactory’: Invocation of init method failed; nested exception is org.hibernate.MappingException: Unable to load class declared as in the configuration:

entendi que o erro esta na classe Usuario…mas que erro é esse?e como resolver? :x

alguma idéia??

de qual apostila vc está falando?

mario da apostila fj-28 Vraptor,Hibernate e ajax…

esse outro probleminha que eu citei a cima eu já resolvi(já estou conseguindo visualizar a minha página), poré na horas de cadastrar da o seguinte erro:

obs: pra ficar mais fácil esse erros surgiram por causa dos códigos que eu coloquei desde a página 113 em diante!!!

Acho que foi erro seu de digitação

vc escreveu Caelum com v

se vc arrumar vai

mapping class=“br.com.vaelum.goodbuy.modelo.Usuario”

Coloca sua classe UsuarioDAO e UsuarioCOntroller aqui

[code]package br.com.caelum.goodbuy.controller;
@Resource
public class UsuariosController {
private final UsuarioWeb usuarioWeb;
private final UsuarioDao dao;
private final Result result;
private final Validator validator;
public UsuariosController(UsuarioDao dao,Result result, Validator validator, UsuarioWeb usuarioWeb){
this.dao=dao;
this.result=result;
this.validator=validator;
this.usuarioWeb=usuarioWeb;
}
@Post @Path("/usuarios")
public void adiciona(Usuario usuario){
if(dao.existeUsuario(usuario)){
validator.add(new ValidationMessage(“Login já existe”,“usuario.login”));
}
validator.onErrorUse(page()).of(UsuariosController.class).novo();
}
public void novo(){
}
@Get @Path("/login")
public void loginForm(){
}
@Post @Path("/login")
public void login(Usuario usuario){
Usuario carregado=dao.carrega(usuario);
if(carregado==null){
validator.add(new ValidationMessage(“Login e/ou senha inválidos”,“usuario.login”));
}
validator.onErrorUse(page()).of(UsuariosController.class).loginForm();
usuarioWeb.login(carregado);
result.redirectTo(ProdutosController.class).lista();
}
@Path("/logout")
public void logout(){
usuarioWeb.logout();
result.redirectTo(ProdutosController.class).lista();

}	

}
[/code]

package br.com.caelum.goodbuy.dao; public class [b]UsuarioDao[/b] { private final Session session; public UsuarioDao(Session session){ this.session=session; } public boolean existeUsuario(Usuario usuario){ Usuario encontrado=(Usuario) session.createCriteria(Usuario.class) .add(Restrictions.eq("login", usuario.getLogin())) .uniqueResult(); return encontrado !=null; } public Usuario carrega(Usuario usuario){ return(Usuario) session.createCriteria(Usuario.class) .add(Restrictions.eq("login", usuario.getLogin())) .add(Restrictions.eq("senha", usuario.getSenha())) .uniqueResult(); } public void adiciona(Usuario usuario){ Transaction tx=this.session.beginTransaction(); this.session.save(usuario); tx.commit(); } }

Seu UsuarioDAO deve ter a anotação @Component

e apenas uma observação: se eu não me engano, os atributos da classe não devem ser final, se eu me lembro não funciona direito

zorren anotei a classe e tirei o final do UsuariosController, mas continua dando erro:

Agora ele não conseguiu criar a Sessão do hibernate

como que suas Sessões do hibernate são criadas??

eu dei uma olhadinha nessa apostila, nos exemplos tem final, então esse não deve ser o erro

Lita

No erro aparece que o import do Session é: org.hibernate.classic.Session

Tente mudar para org.hibernate.Session

É só um palpite (já funcionou numa outra situação)

[quote=zoren]Seu UsuarioDAO deve ter a anotação @Component

e apenas uma observação: se eu não me engano, os atributos da classe não devem ser final, se eu me lembro não funciona direito[/quote]
Não tem nenhuma diferença pro VRaptor usar ou não final… pode deixar como final, é até melhor…

qto ao último erro, é o import mesmo… se colocar como org.hibernate.Session vai funcionar

oi galera…então já importei o org.hibernate.Session…mas o erro persiste:

:?: :x

anota o UsuarioDao com @Component (do vraptor)

iup…hehe agora esta funcionando…

valeu galeraaaaaaaaaaaaa
até a proóxima…:slight_smile:

Olá pessoal,

Comecei a pouco tempo a estudar o Vraptor, e estou com um problema similar ao discutido neste forum.

[quote]org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘produtosController’ defined in file [/Users/lozaki/Documents/Projetos/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/vraptor-blank-project/WEB-INF/classes/br/com/caelum/vraptor/blank/controller/ProdutosController.class]: Unsatisfied dependency expressed through constructor argument with index 2 of type [br.com.caelum.vraptor.blank.dao.ProdutosDAO]: : Error creating bean with name ‘produtosDAO’ defined in file [/Users/lozaki/Documents/Projetos/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/vraptor-blank-project/WEB-INF/classes/br/com/caelum/vraptor/blank/dao/ProdutosDAO.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [org.hibernate.Session]: : No matching bean of type [org.hibernate.Session] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [org.hibernate.Session] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘produtosDAO’ defined in file [/Users/lozaki/Documents/Projetos/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/vraptor-blank-project/WEB-INF/classes/br/com/caelum/vraptor/blank/dao/ProdutosDAO.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [org.hibernate.Session]: : No matching bean of type [org.hibernate.Session] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [org.hibernate.Session] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:698)

[/quote]

Tentei seguir as dicas de voces entretanto ainda estou com este problema. estou colocando meus códigos abaixo:

package br.com.caelum.vraptor.blank.dao;

import java.io.Serializable;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import br.com.caelum.vraptor.blank.entity.Produto;
import br.com.caelum.vraptor.ioc.Component;

@Component
public class ProdutosDAO {
	
	private Session session;
	
	public ProdutosDAO(Session session){
		this.session = session;
	}
	
	public Produto save(Produto produto){
		Serializable id = this.session.save(produto);
		produto.setId((Long)id);
		return produto;
	}
}
package br.com.caelum.vraptor.blank.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.context.ApplicationContext;

import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.blank.dao.ProdutosDAO;
import br.com.caelum.vraptor.blank.entity.Produto;
import br.com.caelum.vraptor.ioc.Component;

@Resource
@Component
public class ProdutosController {
	
	private Result result;
	private ApplicationContext applicationContext;
	private ProdutosDAO dao;
	
	public ProdutosController(Result result, ApplicationContext applicationContext, ProdutosDAO dao){
		this.applicationContext = applicationContext;
		this.result = result;
		this.dao = dao;
	}
	
	public void form(){
		
	}
	
	public void save(Produto produto){
		this.dao.save(produto);
		this.result.redirectTo(ProdutosController.class).list();
	}
	
	public List<Produto> list() {
		List<Produto> prodList = new ArrayList<Produto>();
		Produto p = new Produto();
		p.setNome("N teste");
		p.setDescricao("D teste");
		prodList.add(p);
		result.include("teste", "teste");
		return this.dao.list();
	}

}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	<display-name>vraptor-blank-project</display-name>

	<!--
		VRaptor will scan classpath for all @Component and 
		@Resource inside WEB-INF/classes

		If you want to load them also from WEB-INF/lib/ jars, 
		you need to specify from which packages they will
		be loaded, comma separated:
	-->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			/WEB-INF/config/applicationContext.xml
		</param-value>
	</context-param>
	
	<!-- 
     -->
	<context-param>
        	<param-name>br.com.caelum.vraptor.packages</param-name>
	        <param-value>br.com.caelum.vraptor.blank</param-value>
    </context-param>
    
	<!--  
	   if you are using a servlet 3.0 container 
		as glassfish 3 or jetty 8, you dont need this
		filter configuration 
	-->
		
		
	<filter>
		<filter-name>vraptor</filter-name>
		<filter-class>br.com.caelum.vraptor.VRaptor</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>vraptor</filter-name>
		<url-pattern>/*</url-pattern>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>REQUEST</dispatcher>
	</filter-mapping>
</web-app>

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:p="http://www.springframework.org/schema/p"
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:jee="http://www.springframework.org/schema/jee"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:jaxws="http://cxf.apache.org/jaxws"
	xsi:schemaLocation="
			http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
			http://www.directwebremoting.org/schema/spring-dwr
			http://www.directwebremoting.org/schema/spring-dwr-3.0.xsd
			http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
			http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
			http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
			http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
			http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd ">
			
			
	<context:property-placeholder location="WEB-INF/config/jdbc.properties" />

	<bean id="dataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName">
			<value>${jdbc.driverClassName}</value>
		</property>
		<property name="url">
			<value>${jdbc.url}</value>
		</property>
		<property name="username">
			<value>${jdbc.username}</value>
		</property>
		<property name="password">
			<value>${jdbc.password}</value>
		</property>
	</bean>

	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

		<property name="dataSource" ref="dataSource" />
		<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
		
		<!-- 
		 -->
		<property name="packagesToScan">
			<list>
				<value>br.com.caelum.vraptor.blank.entity</value>
			</list>
		</property>

		<!-- Configuracoes do Hibernate -->
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.search.default.directory_provider">org.hibernate.search.store.FSDirectoryProvider</prop>

				<prop key="hibernate.search.default.indexBase">./var/lucene/indexes</prop>

				<prop key="hibernate.show_sql">true</prop>
				<prop key="hibernate.hbm2ddl.auto">update</prop>
			</props>
		</property>
	</bean>

	<bean id="transactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory">
			<ref local="sessionFactory" />
		</property>
	</bean>
<!-- 
 -->
	<tx:annotation-driven transaction-manager="transactionManager" />

	<context:annotation-config />

</beans>

Alguém saberia dizer o q está de errado com o meu código ?

Obrigado pela atenção

se vc vai usar o spring pra gerenciar as sessões do Hibernate, vc precisa usar o jeito do spring: ou seus daos vao estender HibernateDaoSupport, ou vc recebe o HibernateTemplate (do Spring) no construtor…

se não funcionar receber o HibernateTemplate, vc vai receber um SessionFactory, e dar new HibernateTemplate(sessionFactory);

Olá Lucas,

Tentei fazer o meu DAO estender de HibernateDaoSupport, entretanto obtive a mensagem de erro abaixo:

Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: ‘sessionFactory’ or ‘hibernateTemplate’ is required

Tentei fazer o meu DAO receber o HibernateTemplate e o SessionFactory entretanto não funcionou dando a seguinte mensagem de erro:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘produtosController’ defined in file [/Users/lozaki/Documents/Projetos/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/vraptor-blank-project/WEB-INF/classes/br/com/caelum/vraptor/blank/controller/ProdutosController.class]: Unsatisfied dependency expressed through constructor argument with index 2 of type [br.com.caelum.vraptor.blank.dao.ProdutosDAO]: : Error creating bean with name ‘produtosDAO’ defined in file [/Users/lozaki/Documents/Projetos/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/vraptor-blank-project/WEB-INF/classes/br/com/caelum/vraptor/blank/dao/ProdutosDAO.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [org.hibernate.SessionFactory]: : No matching bean of type [org.hibernate.SessionFactory] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Qualifier(value=sessionFactory)}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [org.hibernate.SessionFactory] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Qualifier(value=sessionFactory)}; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘produtosDAO’ defined in file [/Users/lozaki/Documents/Projetos/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/vraptor-blank-project/WEB-INF/classes/br/com/caelum/vraptor/blank/dao/ProdutosDAO.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [org.hibernate.SessionFactory]: : No matching bean of type [org.hibernate.SessionFactory] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Qualifier(value=sessionFactory)}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [org.hibernate.SessionFactory] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Qualifier(value=sessionFactory)}

Estou achando que o as configurações do applicationContext.xml, não estão sendo carregadas, pois quando eu tento colocar os listeners abaixo no web.xml, eu consigo identificar umas linhas no console que indicam que o applicationContext.xml está sendo carregado, entretanto com esses listeners o sistema não funciona.

    <listener>
       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <listener>
       <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>

existe uma forma de eu confirmar o carregamento do applicationContext.xml ?
Voce tem mais alguma idéia do que que pode ser o problema ?

Grato a atenção

onde vc colocou seu applicationContext.xml?

o vraptor só carrega ele se estiver no classpath (na pasta src, ou algo do tipo)…

pra funcionar, estenda HibernateDaoSupport, sobrescreva o método setSessionFactory e anote-o com @Autowired (do spring)