Error Criando Usuário[RESOLVIDO]

17 respostas
L

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??

17 Respostas

M

de qual apostila vc está falando?

L

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!!!

Z

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”

Z

Coloca sua classe UsuarioDAO e UsuarioCOntroller aqui

L
package br.com.caelum.goodbuy.controller;
@Resource
public class [b]UsuariosController[/b] {
	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();
		
	}	
}
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();
	}
}
Z

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

L

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

Z

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

L

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)

L

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


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

L

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

:?: :x

L

anota o UsuarioDao com @Component (do vraptor)

L

iup…hehe agora esta funcionando…

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

L

Olá pessoal,

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

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)

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

L

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

L

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

L

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)

Criado 26 de fevereiro de 2010
Ultima resposta 12 de mar. de 2010
Respostas 17
Participantes 6