Eai pessoal!
Estou com um projeto utilizando JSF, que estou tendo um problema de retorno de conexão.
Quando utilizo o frontend, a conexão está retornando null.
Erro:
javax.servlet.ServletException: java.lang.NullPointerException
javax.faces.webapp.FacesServlet.service(FacesServlet.java:671)
io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)
io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)
io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:805)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
java.lang.Thread.run(Thread.java:748)
Estava rodando o processo debugando e coloquei um sout no catch pra imprimir a exceção, e obtive isso aqui:
java.lang.ClassNotFoundException: org.postgresql.Driver from [Module "deployment.projeto_receita.war:main" from Service Module Loader]
Vi que esse erro é algo com o driver, mas quando eu faço as interações com o banco de dados, por um método main, eu obtenho a conexão normalmente, e consigo inserir, deletar, etc…
Tá aí uma foto do meu connection no momento que estou rodando o código pela classe main:
Eu obtenho a conexão normalmente. Já quando executo pelo o front, o connection me retorna null. Vou colocar aqui minhas classes pra ver se alguém sabe onde pode ser o erro. Não sei se pode ser alguma dependência no pom, pois estou utilizando o driver que comumente vejo sendo utilizado em projetos, e a versão que está em meu pom é a mesma do driver do banco:
Classe ConnectionFactory:
package connection;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionFactory {
private static final String DRIVER_CLASS = "org.postgresql.Driver";
private static final String URL = "jdbc:postgresql://localhost:5432/receita_cadastro";
private static final String username = "postgres";
private static final String password = "123456";
public static Connection getConnection(){
Connection connection = null;
try{
Class.forName(DRIVER_CLASS);
connection = DriverManager.getConnection(URL, username, password);
connection.setAutoCommit(true);
} catch (SQLException | ClassNotFoundException e) {
System.out.println(e.getMessage());
// e.printStackTrace();
}
return connection;
}
}
Classe DAO (Método salvar):
public class ReceitaDAO {
Connection connection = null;
public boolean salvar(Receita receita) {
Connection connection = new ConnectionFactory().getConnection();
String sql = "INSERT INTO receita(nome, tipo, ingredientes, modopreparo) VALUES(?,?,?,?)";
try {
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, receita.getNome());
preparedStatement.setString(2, receita.getTipoReceita());
preparedStatement.setString(3, receita.getIngredientes());
preparedStatement.setString(4, receita.getModoDePreparo());
preparedStatement.execute();
return true;
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
Classe Controller:
package controller;
import dao.ReceitaDAO;
import model.Receita;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import java.util.List;
@ViewScoped
@ManagedBean
public class ReceitaController {
private Receita receita;
private ReceitaDAO receitaDAO;
private List<Receita> receitaList;
public ReceitaController() {
this.receita = new Receita();
this.receitaDAO = new ReceitaDAO();
}
public void salvarReceita() {
this.receitaDAO.salvar(this.receita);
this.clearInfo();
}
public void updateReceita() {
this.receitaDAO.updateReceita(receita);
}
public List<Receita> getReceitaList() {
if (this.receitaList == null)
this.receitaList = this.receitaDAO.ListingReceita();
return this.receitaList;
}
public void deleteReceita() {
this.receitaDAO.deleteReceita(receita);
}
public void clearInfo() {
this.receita = new Receita();
this.receitaList = null;
}
public Receita getReceita() {
return receita;
}
public void setReceita(Receita receita) {
this.receita = receita;
}
public ReceitaDAO getReceitaDAO() {
return receitaDAO;
}
public void setReceitaDAO(ReceitaDAO receitaDAO) {
this.receitaDAO = receitaDAO;
}
public void setReceitaList(List<Receita> receitaList) {
this.receitaList = receitaList;
}
}
Pom:
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>groupId</groupId>
<artifactId>projeto-receita</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.2.20</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.5.0</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.faces</artifactId>
<version>2.2.19</version>
</dependency>
</dependencies>
</project>
Desde já agradeço!