Solucionado (ver solução)
Solucionado
(ver solução)
9
respostas

HTTP Status 500 - Internal Server Error

Informações:   Loading application [novo] at [/novo]
Informações:   novo was successfully deployed in 6.036 milliseconds.
Informações:   ESTA É A HOME DA EDFRANGOS.
Informações:   Opcao{nomeOpcao=nada, somaOuDiminui=s}
Advertência:   StandardWrapperValve[dispatcher]: Servlet.service() for servlet dispatcher threw exception
java.lang.NullPointerException
package br.com.novo.edfrangos.daos;

import br.com.novo.edfrangos.models.Opcao;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

@Repository
@Transactional
public class OpcaoDAO {

    @PersistenceContext
    private EntityManager manager;

    public void gravar(Opcao opcao) {
        manager.persist(opcao);
    }

}
package br.com.novo.edfrangos.conf;

import javax.persistence.EntityManagerFactory;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import java.util.Properties;

@EnableTransactionManagement
public class JPAConfiguration {

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean factoryBean
                = new LocalContainerEntityManagerFactoryBean();

        JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();

        factoryBean.setJpaVendorAdapter(vendorAdapter);

        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setUsername("postgres");
        dataSource.setPassword("123456");
        dataSource.setUrl("jdbc:postgresql://localhost:5432/edfrangos");
        dataSource.setDriverClassName("org.postgresql.Driver");

        factoryBean.setJtaDataSource(dataSource);

        Properties props = new Properties();
        props.setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");
        props.setProperty("hibernate.show_sql", "true");
        props.setProperty("hibernate.hbm2ddl.auto", "update");
        factoryBean.setJpaProperties(props);

        factoryBean.setPackagesToScan("br.com.novo.edfrangos.models");

        return factoryBean;

    }

    @Bean
    public JpaTransactionManager transactionManager(EntityManagerFactory emf) {
        return new JpaTransactionManager(emf);
    }

}

package br.com.novo.edfrangos.controllers;

import br.com.novo.edfrangos.daos.OpcaoDAO;
import br.com.novo.edfrangos.models.Opcao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;


@Controller
public class OpcaoController {

    @Autowired
    private OpcaoDAO opcaoDAO;

    @RequestMapping("/opcao/form")
    public String form() {
        return "opcao/form";
    }

    @RequestMapping("/opcao")
    public String gravar(Opcao opcao) {
        System.out.println(opcao);
        opcaoDAO.gravar(opcao);
        return "opcao/ok";
    }
}
package br.com.novo.edfrangos.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HomeController {

    @RequestMapping("/")
    public String index() {
        System.out.println("ESTA É A HOME DA EDFRANGOS.");
        return "home";
    }
}
package br.com.novo.edfrangos.conf;

import br.com.novo.edfrangos.controllers.HomeController;
import br.com.novo.edfrangos.daos.OpcaoDAO;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@EnableWebMvc
@ComponentScan(basePackageClasses = {HomeController.class, OpcaoDAO.class})
public class AppWebConfiguration {

    @Bean
    public InternalResourceViewResolver internalResourceViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }

}
9 respostas

Não estou conseguindo salvar a opcao no banco estou usando postgres e netbeans

Oi Thiago, boa noite. Você acrescentou a classe JPAConfiguration no objeto que é retornado no método getServletConfigClasses() na sua classe ServletSpringMVC?

dessa maneira:

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

Sim.

package br.com.novo.edfrangos.conf;

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

public class ServeltSpringMVC extends AbstractAnnotationConfigDispatcherServletInitializer {

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

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

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

}

Oi Thiago, me desculpe, eu não tinha prestado atenção na primeira parte da pergunta. O programa acusa java.lang.NullPointerException . Qual ação você está tentando fazer que acusa este erro? Ao que parece o nome da opção está nulo.

Você pode postar a stacktrace inteira aqui pra gente analisar?

eu estou tentando salvar no banco a opcao. Observei que o minha Entity opcao esta acusando que não contem uma unidade de persistência no projeto.

e meu servidor glassfish está aparecendo a seguinte observação no console:

Informações:   HHH000412: Hibernate Core {4.3.0.Final}
Informações:   HHH000206: hibernate.properties not found
Informações:   HHH000021: Bytecode provider name : javassist
Informações:   HCANN000001: Hibernate Commons Annotations {4.0.4.Final}
Informações:   HHH000400: Using dialect: org.hibernate.dialect.PostgreSQL81Dialect
Informações:   HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException
Informações:   HHH000397: Using ASTQueryTranslatorFactory
Informações:   HHH000228: Running hbm2ddl schema update
Informações:   HHH000102: Fetching database metadata
Informações:   HHH000396: Updating schema
WARN:   SQL Error: 0, SQLState: 42703
ERROR:   ERROR: column t1.tgconstrname does not exist
  Posição: 113
ERROR:   HHH000299: Could not complete schema update
java.lang.NullPointerException

pesquisando sobre... ERROR: column t1.tgconstrname does not exist ao que parece é a versão com postgres estou usando o postgres 10 vou tentar achar o 9

Oi Thiago,ele não está conseguindo gerar o schema já que apareceCould not complete schema update e dá o motivo: column t1.tgconstrname does not exist.

Pode ser um problema de versão como você falou, mas acho que não seja necessário trocar. Eu chuto que pode ser o que você setou na hora de configurar o dialeto dentro da sua JPAConfiguration:

props.setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");

tente trocar por:

props.setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQL9Dialect");

ou procurar a versão 9 específica que você esteja usando neste link: https://docs.jboss.org/hibernate/orm/5.2/javadocs/org/hibernate/dialect/package-summary.html

solução!

quebrei a cabeça trocando esse setProperty e nada. ai resolvi rever linha por linha minha JPAConfiguration e achei o erro que segue abaixo: Obrigado Thais pelo apoio.

   dataSource.setUrl("jdbc:postgresql://localhost:5432/edfrangos");
        dataSource.setDriverClassName("org.postgresql.Driver");

//OLHA O ERRO AQUI.
        //factoryBean.setJtaDataSource(dataSource);
        factoryBean.setDataSource(dataSource);


        Properties props = new Properties();

Boa, Thiago! Obrigado pelo retorno e bons estudos!