Problema com Spring

6 respostas
J

segue o erro:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name produtoDao defined in file [C:\Users\andre\Desktop\apache-tomcat-7.0.14\wtpwebapps\Upload\WEB-INF\classes\br\com\upload\persistencia\ProdutoDao.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.upload.persistencia.ProdutoDao]: Constructor threw exception; nested exception is java.lang.ExceptionInInitializerError

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1009)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:955)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:487)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)

at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)

at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)

at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)

at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)

at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:605)

at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:926)

at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:477)

at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:383)

at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283)

at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)

at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4723)

at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5226)

at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5221)

at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)

at java.util.concurrent.FutureTask.run(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at java.lang.Thread.run(Unknown Source)

Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.upload.persistencia.ProdutoDao]: Constructor threw exception; nested exception is java.lang.ExceptionInInitializerError

at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:162)

at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:76)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1002)

 21 more

a classe ProdutoDao:

@Repository
public class ProdutoDao {

…}

Spring.xml----->

<?xml version="1.0" encoding="UTF-8"?>
<!-- Activates scanning of @Autowired -->
<context:annotation-config />
<!-- Scans for @Repository, @Service and @Component -->
<context:component-scan base-package="br.com.upload" />
<!-- Enable @Transactional support -->
<tx:annotation-driven />

6 Respostas

E

Não lembro ao certo deste @Repository, mas vc nao teria que mapear sua DAO no Spring.xml?

Abrçs

J

segui este exemplo da caelum http://blog.caelum.com.br/spring-javaee-jsf/

jaboot

Já tentou colocar isso no seu applicationContext?

<!-- Activates various annotations to be detected in bean classes -->
<context:annotation-config />

<!-- Scans the classpath for annotated components that will be auto-registered as Spring beans. For example @Controller and @Service. Make sure to set the correct base-package -->
<context:component-scan base-package="br.com.suas.classes" />
J

coloquei sim, o problema parece estar relacionado com o construtor da classe ProdutoDao.

J
@Repository
	public class ProdutoDao {
		private  Session session;
		
		public ProdutoDao() {
			this.session=HibernateUtil.getSession();
		}
		
	public void salvar(Produto produto){
	Transaction tx = session.beginTransaction();
	session.save(produto);
	tx.commit();

.....
A classe HibernateUtil
public class HibernateUtil {
  
private static SessionFactory sessionFactory;
	
	private static final ThreadLocal sessionThread;

	static {
		sessionThread = new ThreadLocal();
		sessionFactory = new Configuration().configure().buildSessionFactory();
	}
	
	public static Session getSession() {
		Session session = (Session)sessionThread.get();
		
		if (session == null) {
			session = sessionFactory.openSession(); 
			sessionThread.set(session);
		}
		return session;
	}
	
	public static void closeSession() {
		Session session = (Session)sessionThread.get();
		sessionThread.set(null);
		
		if (session != null && session.isOpen()) {
			session.flush();
			session.close();
		}
	}
}
E

Faça um teste:

public ProdutoDao() {  
            //this.session=HibernateUtil.getSession();  
        }

Comente a atribuição de session no construtor, ou retire na HibernateUtil o bloco estático.
Já tive problemas quando eu tinha um bloco de inicialização estático.

Criado 17 de outubro de 2012
Ultima resposta 17 de out. de 2012
Respostas 6
Participantes 3