NullPointerException - Hibernate 5 e Spring 4.2.4

16 respostas
java
A

Boa noite pessoal…

Sou novato no java web e estou com o problemas no estudo do Spring e Hibernate… Já procurei no google, aqui no GUJ, enfim… Infelizmente não encontrei nada que conseguisse me ajudar até agora.
As configurações creio que estão corretas, pois o Hibernate criou as tabelas no banco corretamente. Estou utilizando configuração programática… O erro que tenho ao iniciar minha aplicação é esse:

type Exception reportmessage Request processing failed; nested exception is java.lang.NullPointerExceptiondescription The server encountered an internal error that prevented it from fulfilling this request.exceptionorg.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException

org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:981)

org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:860)

javax.servlet.http.HttpServlet.service(HttpServlet.java:622)

org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845)

javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)

com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)

root causejava.lang.NullPointerException

br.com.amartinss.fincontrol.dao.HibernateDAO.getSession(HibernateDAO.java:14)

br.com.amartinss.fincontrol.dao.UsuariosDAO.auth(UsuariosDAO.java:19)

br.com.amartinss.fincontrol.controller.HomeController.authentication(HomeController.java:21)

sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

java.lang.reflect.Method.invoke(Method.java:497)

org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:222)

org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)

org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)

org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:814)

org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:737)

org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)

org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)

org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)

org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:969)

org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:860)

javax.servlet.http.HttpServlet.service(HttpServlet.java:622)

org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845)

javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)

com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)

note The full stack trace of the root cause is available in the Apache Tomcat/8.0.30 logs.

Abaixo segue meus arquivos de configuração e DAO:

HibernateConfig

package br.com.amartinss.fincontrol.config;

import org.apache.tomcat.dbcp.dbcp2.BasicDataSource;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;
import org.springframework.orm.hibernate5.HibernateTransactionManager;
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.sql.DataSource;
import java.util.Properties;

@Configuration
@EnableTransactionManagement
@ComponentScan(basePackages = {"br.com.amartins.fincontol"})
public class HibernateConfig {

    @Bean
    public DataSource dataSource(){
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/fincontrol");
        dataSource.setUsername("root");
        dataSource.setPassword("***********");
        return dataSource;
    }

    @Bean
    Properties hibernateProperties(){
        Properties properties = new Properties();
        properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5InnoDBDialect");
        properties.setProperty("hibernate.hbm2ddl.auto", "update");
        properties.setProperty("hibernate.show_sql", "true");
        properties.setProperty("hibernate.format_sql", "true");
        properties.setProperty("hibernate.current_session_context_class", "thread");
        properties.setProperty("hibernate.globally_quoted_identifiers", "true");
        return properties;
    }

    @Bean
    public LocalSessionFactoryBean sessionFactoryBean(){
        LocalSessionFactoryBean  bean = new LocalSessionFactoryBean();
        bean.setDataSource(dataSource());
        bean.setHibernateProperties(hibernateProperties());
        bean.setPackagesToScan("br.com.amartinss.fincontrol.model");
        return bean;
    }

    @Bean
    @Autowired
    public HibernateTransactionManager  transactionManager(SessionFactory factory){
        HibernateTransactionManager manager = new HibernateTransactionManager();
        manager.setSessionFactory(factory);
        return manager;
    }

    @Bean
    public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
        return new PersistenceExceptionTranslationPostProcessor();
    }
}

SpringConfig

package br.com.amartinss.fincontrol.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@EnableWebMvc
@Configuration
@ComponentScan(basePackages = {"br.com.amartinss.fincontrol"})
public class SpringConfig extends WebMvcConfigurerAdapter {

    private static final String VIEW_RESOLVER_PREFIX = "/WEB-INF/views/";
    private static final String VIEW_RESOLVER_SUFFIX = ".jsp";

    @Bean
    public InternalResourceViewResolver internalResourceViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix(VIEW_RESOLVER_PREFIX);
        resolver.setSuffix(VIEW_RESOLVER_SUFFIX);
        return resolver;
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/").setCachePeriod(31556926);
    }
}

ServletAppConfig

package br.com.amartinss.fincontrol.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class ServletAppConfig extends AbstractAnnotationConfigDispatcherServletInitializer {

   @Override
    protected Class<?>[] getRootConfigClasses() {
        return null;
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringConfig.class, HibernateConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] {"/"};
    }

}

HibernateDAO

package br.com.amartinss.fincontrol.dao;


import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;

public abstract class HibernateDAO {

    @Autowired
    SessionFactory sessionFactory;

    public Session getSession() {
        return sessionFactory.getCurrentSession();
    }

}

UsuariosDAO

package br.com.amartinss.fincontrol.dao;

import org.hibernate.*;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import br.com.amartinss.fincontrol.model.Usuario;
import org.springframework.transaction.annotation.Transactional;

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

@Repository
public class UsuariosDAO extends HibernateDAO {

    @Transactional
    public List auth(Usuario usuario) {
        Session session = getSession();
        List list = new ArrayList();
        try{
            Criteria criteria = session.createCriteria(Usuario.class);
            list = criteria.add(Restrictions.eq("usuario", usuario.getUsuario()))
                    .add(Restrictions.eq("senha", usuario.getSenha()))
                    .setMaxResults(1).list();
        } catch (HibernateException e){
            throw new RuntimeException(e);
        }finally {
            session.close();
        }

        return list;
    }
}

Isso é tudo que tenho até agora… Se alguém puder me ajudar agradeço…

Abs

16 Respostas

R

Tem algumas coisas que eu notei que você pode mudar.

O método LocalSessionFactoryBean sessionFactoryBean(), mude o nome para sessionFactory(). O Spring vai criar o bean sempre com o nome do método. Então, se o nome do método for diferente, e você tentar injetar um bean SessionFactory, não vai conseguir.

Alterando o nome do método que sugeri, você pode remover a anotação @Autowired do método transactionManager().

Por fim, na classe HibernateDAO para você usar a anotação @Autowired na SessionFactory, você precisa transformar a classe em um bean (@Repository).

Faça essas alterações e depois relate o que aconteceu de diferente.

A

romarcio, antes de mais nada, obrigado por ter respondido…
Fiz as alterações que você sugeriu mas ainda dá nullPointerException:

root cause java.lang.NullPointerException
br.com.amartinss.fincontrol.dao.HibernateDAO.getSession(HibernateDAO.java:14)

Parece que o SessionFactory não abre uma session no LocalSessionFactoryBean sessionFactory() da classe HibernateConfig só não estou entendendo o pq

R

Parece que a SessionFactory não está sendo injetada na classe HobernateDAO.
Tente algo assim, na classe HibernateDAO crie um construtor com a SessionFactory e remova as anotações da classe.
Depois na classe UsuarioDAO crie um construtor com a SessionFactory na assinatura e adicione a anotação Autorwired no construtor, passando a SessionFactory no método super() do construtor.

public abstract class HibernateDAO {

        SessionFactory sessionFactory;
	
	public HibernateDAO(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}
    ....
}

@Repository
public class UsuariosDAO extends HibernateDAO {
	
	@Autowired
	public UsuariosDAO(SessionFactory) {
		super(sessionFactory)
	}
	
	....
}
A

Eu fiz algumas alterações ontem nos arquivos

HibernateConfig

package br.com.amartinss.fincontrol.config;

import org.apache.commons.dbcp2.BasicDataSource;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;
import org.springframework.orm.hibernate5.HibernateTransactionManager;
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.sql.DataSource;
import java.util.Properties;

@Configuration
@ComponentScan("br.com.amartinss.fincontrol")
@EnableTransactionManagement
public class HibernateConfig {

    @Bean
    public DataSource dataSource(){
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/fincontrol");
        dataSource.setUsername("root");
        dataSource.setPassword("19821501");
        return dataSource;
    }

    @Bean
    Properties hibernateProperties(){
        Properties properties = new Properties();
        properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5InnoDBDialect");
        properties.setProperty("hibernate.hbm2ddl.auto", "update");
        properties.setProperty("hibernate.show_sql", "true");
        properties.setProperty("hibernate.format_sql", "true");
        properties.setProperty("hibernate.current_session_context_class", "thread");

        return properties;
    }

    @Bean
    public LocalSessionFactoryBean sessionFactory(){
        LocalSessionFactoryBean bean = new LocalSessionFactoryBean();
        bean.setDataSource(dataSource());
        bean.setHibernateProperties(hibernateProperties());
        bean.setPackagesToScan(new String[]{"br.com.amartinss.fincontrol.model"});
        return bean;
    }

    @Bean
    @Autowired
    public HibernateTransactionManager transactionManager(SessionFactory factory){
        HibernateTransactionManager manager = new HibernateTransactionManager();
        manager.setSessionFactory(factory);
        return manager;
    }

    @Bean
    public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
        return new PersistenceExceptionTranslationPostProcessor();
    }
}

e no HibernateDAO

package br.com.amartinss.fincontrol.dao;


import br.com.amartinss.fincontrol.config.HibernateConfig;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;

public abstract class HibernateDAO {

    @Autowired
    public Session getSession() {
        HibernateConfig config = new HibernateConfig();
        SessionFactory sessionFactory = config.sessionFactory().getObject();
        return sessionFactory.getCurrentSession();
    }

}

e agora está me dando o seguinte no stacktrace:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name usuariosDAO: Injection of autowired dependencies failed; nested exception is java.lang.NullPointerException

org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)

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

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

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

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

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

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

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

org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)

org.springframework.context.support.AbstractApplicationContext.__refresh(AbstractApplicationContext.java:538)

org.springframework.context.support.AbstractApplicationContext.jrLockAndRefresh(AbstractApplicationContext.java)

org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java)

org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:668)

org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:540)

org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:494)

org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)

javax.servlet.GenericServlet.init(GenericServlet.java:158)

org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)

org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)

org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)

org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:521)

org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1096)

org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:674)

org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2500)

org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2489)

java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
R

Em HibernateDAO vc não deve fazer o que vez nessa ultima postagem. Faça assim então:

@Repository
public abstract class HibernateDAO { 
    @Autowired
    private SessionFactory sessionFactory;

    public Session getSession() {
        return sessionFactory.getCurrentSession();
    }
}

Depois em UsuarioDAO:

@Repository
public class UsuariosDAO extends HibernateDAO {

       @Transactional
        public List auth(Usuario usuario) {
        Session session = getSession();
        List list = new ArrayList();
        try{
            Criteria criteria = session.createCriteria(Usuario.class);
            list = criteria.add(Restrictions.eq("usuario", usuario.getUsuario()))
                    .add(Restrictions.eq("senha", usuario.getSenha()))
                    .setMaxResults(1).list();
        } catch (HibernateException e){
            throw new RuntimeException(e);
        }finally {
            session.close();
        }

        return list;
    }
}
A

@romarcio Voltou para o primeiro erro fazendo como você me sugeriu agora.
Estava pensando aqui… eu não criei nenhum xml como de costume fazer para o hibernate e spring. Será que eles realmente podem ser substituídos somente pela forma programática?
Obrigado pela paciência e pela ajuda.

R

Não, a falta de XML não é o problema. É possivelmente criar o projeto 100% sem XML.
Tem essa configuração abaixo:

public class ServletAppConfig extends AbstractAnnotationConfigDispatcherServletInitializer {

   @Override
    protected Class<?>[] getRootConfigClasses() {
        return null;
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringConfig.class, HibernateConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] {"/"};
    }

}

A classe HibernateConfig, deveria estar em getRootConfigClasses() e não em getServletConfigClasses(). Faça essa alteração para ver o resultado.

A

Com a alteração o arquivo ficou assim:

package br.com.amartinss.fincontrol.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class ServletAppConfig extends AbstractAnnotationConfigDispatcherServletInitializer {

   @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{HibernateConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] {"/"};
    }

}

Continua com o mesmo exception.

A

Fiz alterações consideráveis no arquivo de configuração. Agora tenho os seguintes arquivos:

db.properties

driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/dbname
secretKey = ***********
username = root

dialect = org.hibernate.dialect.MySQL5InnoDBDialect
hbm2ddl.auto = update
show_sql = true
format_sql = true
current_session_context_class = thread

Initializer

public class Initializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(SpringConfig.class);
        ServletRegistration.Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));
        servlet.addMapping("/");
        servlet.setLoadOnStartup(1);
    }
}

SpringConfigHibernate

@Configuration
@ComponentScan("br.com.amartinss.fincontrol")
@EnableWebMvc
@PropertySource("classpath:db.properties")
@EnableTransactionManagement
public class SpringConfig extends WebMvcConfigurerAdapter {

    private static final String VIEW_RESOLVER_PREFIX = "/WEB-INF/views/";
    private static final String VIEW_RESOLVER_SUFFIX = ".jsp";

    @Autowired
    Environment env;

    @Bean
    public InternalResourceViewResolver internalResourceViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix(VIEW_RESOLVER_PREFIX);
        resolver.setSuffix(VIEW_RESOLVER_SUFFIX);
        return resolver;
    }

    @Bean
    public DataSource dataSource() {
        BasicDataSource ds = new BasicDataSource();
        ds.setUrl(env.getProperty("url"));
        ds.setDriverClassName(env.getProperty("driver"));
        ds.setUsername(env.getProperty("username"));
        ds.setPassword(env.getProperty("secretKey"));

        return ds;
    }

    @Bean
    Properties hibernateProperties(){
        Properties properties = new Properties();
        properties.setProperty("hibernate.dialect", env.getProperty("dialect"));
        properties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("hbm2ddl.auto"));
        properties.setProperty("hibernate.show_sql", env.getProperty("show_sql"));
        properties.setProperty("hibernate.format_sql", env.getProperty("format_sql"));
        properties.setProperty("hibernate.current_session_context_class", env.getProperty("current_session_context_class"));
        return properties;
    }

    @Bean
    public SessionFactory buildSessionFactory(){
        LocalSessionFactoryBuilder builder = new LocalSessionFactoryBuilder(dataSource());
        builder.setProperties(hibernateProperties());
        return builder.scanPackages("br.com;amartinss.fincontrol.model").buildSessionFactory();
    }

    @Bean
    public HibernateTransactionManager transactionManager(){
        HibernateTransactionManager manager = new HibernateTransactionManager();
        manager.setSessionFactory(buildSessionFactory());
        return manager;
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/").setCachePeriod(31556926);
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        OpenSessionInViewInterceptor interceptor = new OpenSessionInViewInterceptor();
        interceptor.setSessionFactory(buildSessionFactory());
        registry.addWebRequestInterceptor(interceptor);
    }
}

HibernateDao

public abstract class HibernateDAO {

    @Autowired
    SessionFactory sessionFactory;

    public Session getSession(){
        return sessionFactory.getCurrentSession();
    }

}

A classe UsuarioDao permanece igual. Agora estou com o seguinte erro:

java.lang.UnsupportedOperationException: The application must supply JDBC connections
    	org.hibernate.engine.jdbc.connections.internal.UserSuppliedConnectionProviderImpl.getConnection(UserSuppliedConnectionProviderImpl.java:44)
    	org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:180)
    	org.jadira.usertype.spi.shared.AbstractUserTypeHibernateIntegrator.use42Api(AbstractUserTypeHibernateIntegrator.java:83)
    	org.jadira.usertype.spi.shared.AbstractUserTypeHibernateIntegrator.integrate(AbstractUserTypeHibernateIntegrator.java:206)
    	org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:278)
    	org.hibernate.boot.internal.SessionFactoryBuilderImpl.__build(SessionFactoryBuilderImpl.java:444)
    	org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java)
    	org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:708)
    	org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724)
    	br.com.amartinss.fincontrol.config.SpringConfig.buildSessionFactory(SpringConfig.java:68)
    	br.com.amartinss.fincontrol.config.SpringConfig$$EnhancerBySpringCGLIB$$4e19507f.CGLIB$buildSessionFactory$3(<generated>)
    	br.com.amartinss.fincontrol.config.SpringConfig$$EnhancerBySpringCGLIB$$4e19507f$$FastClassByCGLIB$$93e15360.invoke(<generated>)
    	org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
    	org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:355)
    	br.com.amartinss.fincontrol.config.SpringConfig$$EnhancerBySpringCGLIB$$4e19507f.buildSessionFactory(<generated>)
    	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	java.lang.reflect.Method.invoke(Method.java:497)
    	org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
    	org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)
    	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1123)
    	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1018)
    	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)
    	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    	org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    	org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    	org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    	org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1192)
    	org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1116)
    	org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)
    	org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545)
    	org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    	org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
    	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
    	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
    	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    	org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    	org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    	org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    	org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
    	org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)
    	org.springframework.context.support.AbstractApplicationContext.__refresh(AbstractApplicationContext.java:538)
    	org.springframework.context.support.AbstractApplicationContext.jrLockAndRefresh(AbstractApplicationContext.java)
    	org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java)
    	org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:668)
    	org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:540)
    	org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:494)
    	org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
    	javax.servlet.GenericServlet.init(GenericServlet.java:158)
    	org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    	org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:521)
    	org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1096)
    	org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:674)
    	org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2500)
    	org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2489)
    	java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    	java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    	org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    	java.lang.Thread.run(Thread.java:745)
R

Agora ficou meio bagunçada a sua configuração, vc misturou configuração de banco com mvc, não é legal isso, não que não funcione, mas o ideal é separar como estava antes.
Notei esse erro: return builder.scanPackages("br.com;amartinss.fincontrol.model").buildSessionFactory();
Tem um ponto e virgula depois do pacote com.
Outra coisa, você precisa transformar a classe HibernateDAO em um bean, senão a anotação @Autowired não vai funcionar. Use a anotação @Repository lá.

@Repository
public abstract class HibernateDAO {
    @Autowired
    SessionFactory sessionFactory;

    public Session getSession(){
        return sessionFactory.getCurrentSession();
    }
}
A

Concordo com vc romarcio, eu só coloquei tudo em um único arquivo para teste… Eu separei agora e fiz as alterações que vc me falou mas ainda está com o mesmo erro…

R

Esse último erro tem haver com a configuração do banco de dados. Acontece quando algo é informado errado, por exemplo, ULR ao invés de URL. Porém não observei nada do tipo na sua postagem. Adicione os valores diretamente na classe, sem usar o arquivo de propriedades, e veja se o erro continua ou não.

A

Eu já tentei adicionar diretamente na classe antes de fazer a postagem mas dá o mesmo erro, e como eu não enxerguei nenhum erro de sintaxe ou escrita postei novamente. Pensei em falta de dependência do jdbc do springframework mas eu já estou com o orm do spring. De qualquer forma esse é o meu pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>br.com.amartinss</groupId>
   <artifactId>fincontrol</artifactId>
   <packaging>war</packaging>
   <version>0.0.1-SNAPSHOT</version>
   <name>fincontrol Maven Webapp</name>
   <url>http://maven.apache.org</url>
   <dependencies>
      <!-- SPRING -->
      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-framework-bom</artifactId>
         <version>4.2.4.RELEASE</version>
         <type>pom</type>
         <scope>import</scope>
      </dependency>

      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-webmvc</artifactId>
         <version>4.2.4.RELEASE</version>
      </dependency>

      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-orm</artifactId>
         <version>4.2.4.RELEASE</version>
      </dependency>

      <!-- APACHE -->
      <dependency>
         <groupId>org.apache.commons</groupId>
         <artifactId>commons-dbcp2</artifactId>
         <version>2.1.1</version>
      </dependency>

      <dependency>
         <groupId>org.apache.tomcat</groupId>
         <artifactId>tomcat-servlet-api</artifactId>
         <version>8.0.30</version>
      </dependency>

      <dependency>
         <groupId>javax.servlet.jsp</groupId>
         <artifactId>jsp-api</artifactId>
         <version>2.2</version>
         <scope>provided</scope>
      </dependency>

      <dependency>
         <groupId>javax.servlet.jsp.jstl</groupId>
         <artifactId>jstl-api</artifactId>
         <version>1.2</version>
         <exclusions>
            <exclusion>
               <groupId>javax.servlet</groupId>
               <artifactId>servlet-api</artifactId>
            </exclusion>
         </exclusions>
      </dependency>

        <dependency>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.20.0-GA</version>
        </dependency>

        <dependency>
         <groupId>org.glassfish.web</groupId>
         <artifactId>jstl-impl</artifactId>
         <version>1.2</version>
         <exclusions>
            <exclusion>
               <groupId>javax.servlet</groupId>
               <artifactId>servlet-api</artifactId>
            </exclusion>
         </exclusions>
      </dependency>

      <!-- LOGGING -->
      <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-api</artifactId>
         <version>1.7.13</version>
      </dependency>

      <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>jcl-over-slf4j</artifactId>
         <version>1.7.13</version>
         <scope>runtime</scope>
      </dependency>

      <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-log4j12</artifactId>
         <version>1.7.13</version>
         <scope>runtime</scope>
      </dependency>

      <dependency>
         <groupId>log4j</groupId>
         <artifactId>log4j</artifactId>
         <version>1.2.17</version>
         <scope>runtime</scope>
      </dependency>

      <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>4.11</version>
         <scope>test</scope>
      </dependency>

      <!-- BANCO HIBERNATE/MYSQL -->
      <dependency>
         <groupId>org.hibernate</groupId>
         <artifactId>hibernate-core</artifactId>
         <version>5.0.7.Final</version>
      </dependency>

      <dependency>
         <groupId>org.hibernate</groupId>
         <artifactId>hibernate-c3p0</artifactId>
         <version>5.0.7.Final</version>
      </dependency>

      <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>5.1.38</version>
      </dependency>

      <!-- JODA TIME -->
      <dependency>
         <groupId>joda-time</groupId>
         <artifactId>joda-time</artifactId>
         <version>2.9.1</version>
      </dependency>

      <dependency>
         <groupId>org.jadira.usertype</groupId>
         <artifactId>usertype.core</artifactId>
         <version>5.0.0.GA</version>
      </dependency>

      <!-- SITEMESH -->
      <dependency>
         <groupId>opensymphony</groupId>
         <artifactId>sitemesh</artifactId>
         <version>2.4.2</version>
      </dependency>
   </dependencies>

   <build>
      <finalName>fincontrol</finalName>
   </build>
</project>

De repente você sente falta de algo aí que eu não senti…kkk

R

Nâo é dependencia o problema, se não haveria uma exceção do tipo NotFoundClassException.
Qual é mesmo a exceção que está sendo lançada agora?

A

Cara obrigado pela ajuda, em um ato de desespero eu decidi deletar esse projeto e começar a configuração do zero. Dessa vez deu certo tudo funcionando com as configurações. Projeto 100% sem xml., pelo menos até agora…kkkk
Como com a configuração deu certo vou fechar esse tópico.

Cara obrigadão mesmo.

[]'s

R

Ok, legal que conseguiu fazer funcionar, mesmo tendo que começar do zero novamente.

Criado 12 de fevereiro de 2016
Ultima resposta 21 de fev. de 2016
Respostas 16
Participantes 2