É aquele velho caso do "Na minha máquina funciona"...
Assim q terminei os cursos de Servlets + JDBC + JSF, fui colocar em prática a teoria e criar um CRUD utilizando os conceitos que vi.
Resumindo: Consegui upar o index p server, e funciona, agora criei uma servlet para testes:
package br.com.wolfgang.web;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.wolfgang.dao.VisitanteDAO;
import br.com.wolfgang.jdbc.ConnectionPool;
import br.com.wolfgang.modelo.Visitante;
@WebServlet(urlPatterns = "/novoVisitante")
public class novoVisitante extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String nome = "nome";
String documento = "documento";
String placa = "placa";
String destino = "destino";
try (Connection con = new ConnectionPool().getConnection()) {
Visitante visitante = new Visitante(nome, documento, placa, destino);
new VisitanteDAO(con);
VisitanteDAO.inserir(visitante);
} catch (Exception e) {
e.printStackTrace();
}
PrintWriter writer = resp.getWriter();
writer.println("Sucesso");
}
}
Que utiliza a classe:
package br.com.wolfgang.jdbc;
import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.hsqldb.jdbc.JDBCPool;
public class ConnectionPool {
private DataSource dataSource;
public ConnectionPool() {
JDBCPool pool = new JDBCPool();
pool.setUrl("jdbc:hsqldb:hsql://localhost/portariaMvn");
pool.setUser("SA");
pool.setPassword("");
this.dataSource = pool;
}
public Connection getConnection() throws SQLException {
Connection connection = dataSource.getConnection();
return connection;
}
}
E assim que acesso essa servlet, ela n executa. Recebo este erro:
HTTP Status 500 – Internal Server Error
Type Exception Report
Message Servlet execution threw an exception
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
javax.servlet.ServletException: Servlet execution threw an exception
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause
java.lang.NoClassDefFoundError: org/hsqldb/jdbc/JDBCPool
br.com.wolfgang.jdbc.ConnectionPool.<init>(ConnectionPool.java:15)
br.com.wolfgang.web.novoVisitante.doGet(novoVisitante.java:36)
javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause
java.lang.ClassNotFoundException: org.hsqldb.jdbc.JDBCPool
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1275)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1104)
br.com.wolfgang.jdbc.ConnectionPool.<init>(ConnectionPool.java:15)
br.com.wolfgang.web.novoVisitante.doGet(novoVisitante.java:36)
javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Note The full stack trace of the root cause is available in the server logs.
Apache Tomcat/9.0.4
Porém se eu crio uma classe teste e tento rodar o main, acaba funcionando:
package br.com.wolfgang.jdbc;
import java.sql.Connection;
import java.sql.SQLException;
import br.com.wolfgang.dao.VisitanteDAO;
import br.com.wolfgang.modelo.Visitante;
public class TestaPool {
public static void main(String[] args) throws SQLException {
String nome = "nome";
String documento = "documento";
String placa = "placa";
String destino = "destino";
try (Connection con = new ConnectionPool().getConnection()) {
Visitante visitante = new Visitante(nome, documento, placa, destino);
new VisitanteDAO(con);
VisitanteDAO.inserir(visitante);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Não sei como prosseguir a partir daqui. Acredito muito q tenha relação com o buildpath hsqldb. Segue o link para facilitar o entendimento. https://i.imgur.com/U4ZOK4p.png