Apostila fj-21

Boa Tarde galera, estou com um probleminha e não consigo resolver…

Seguindo a apostila fj-21 fiz o exercicio de conexao com o banco e as classes pra adicionar o contato no banco, e funcionou perfeitamente mas quando eu joguei essas classes para o “Dynamic Web Project” ele da o erro:

Obs: VO COLOCAR O ERRO EM CODIGO PRA MELHOR VISUALIZAÇÃO !!

[code]HTTP Status 500 -

type Exception report

message

description The server encountered an internal error that prevented it from fulfilling this request.

exception

java.lang.NullPointerException
br.com.wacontactcenter.jdbc.dao.ContatoDAO.adiciona(ContatoDAO.java:25)
br.com.wacontactcenter.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:31)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.32 logs.[/code]

O estranho e que no outro projeto web todas as classes funcionam perfeitamente;

O xml está dessa forma:

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>IntranetWA</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>servletOiMundo</servlet-name> <servlet-class>br.com.wacontactcenter.servlet.OiMundo</servlet-class> </servlet> <servlet-mapping> <servlet-name>servletOiMundo</servlet-name> <url-pattern>/oi</url-pattern> </servlet-mapping> <error-page> <error-code>404</error-code> <location>/404.html</location> </error-page> <servlet> <servlet-name>AdicionaContato</servlet-name> <servlet-class> br.com.wacontactcenter.servlet.AdicionaContatoServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>AdicionaContato</servlet-name> <url-pattern>/adicionaContato</url-pattern> </servlet-mapping> </web-app>

Meu servlet para adicionar esta da seguinte maneira:

[code]package br.com.wacontactcenter.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.wacontactcenter.jdbc.dao.ContatoDAO;
import br.com.wacontactcenter.jdbc.modelo.Contato;

public class AdicionaContatoServlet extends HttpServlet {
protected void service(HttpServletRequest request,
HttpServletResponse response) throws IOException, ServletException {

	PrintWriter out = response.getWriter();

	String nome = request.getParameter("nome");
	String departamento = request.getParameter("departamento");

	Contato contato = new Contato();
	contato.setNome(nome);
	contato.setDepartamento(departamento);

	ContatoDAO dao = new ContatoDAO();
	dao.adiciona(contato);

	out.println("<html>");
	out.println("<body>");
	out.println("Contato " + contato.getNome() + " Funcionario Adicionado");
	out.println("</body>");
	out.println("</html>");
}

}[/code]

Ainda não consegui ver aonde esta meu problema, se puderem me ajudar agradeço muito !!

veio…

coloca seu Dao… e seu Bean

falou

Boa tarde!

seu problema ta na sua classe ContatoDAO.java na linha 25

sem olhar seu dao fica dificil, mas provavelmente vc esqueceu de preencher algum campo de seu contato

debuga sua aplicação e coloca um breakpoint na linha 25 do seu ContatoDAO

Desculpem por não ter colocado, aqui esta meu DAO:

[code]package br.com.wacontactcenter.jdbc.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import br.com.wacontactcenter.jdbc.modelo.Contato;
import br.com.wacontactcenter.jdbc.connection.Connect;

public class ContatoDAO {

private Connection connection;

public ContatoDAO() {
	this.connection = new Connect().getConexao();
}

 public void adiciona(Contato contato) {
     String sql = "insert into contatos " +
             "(nome,departamento)" +
             " values (?,?)";
 
     try {
         // prepared statement para inserção
         PreparedStatement stmt = connection.prepareStatement(sql);
 
         // seta os valores
         stmt.setString(1,contato.getNome());
         stmt.setString(2,contato.getDepartamento());

         // executa
         stmt.execute();
         stmt.close();
     } catch (SQLException e) {
         throw new RuntimeException(e);
     }
 }

}[/code]

vc debugou

o erro esta estourando nessa linha

PreparedStatement stmt = connection.prepareStatement(sql); 

é provavel que o connection esteja nullo

coloca sua classe Connect pra gente da uma olhada

coloca sua classe Conect…

[]s;

quero dar uma olhada na sua fabrica de conexao,

O estranho e que quando eu fiz os primeiro exercicio q sao usadas essas classes funcionou tudo perfeitamente, estranho estar dando esser erro.

[code]package br.com.wacontactcenter.jdbc.connection;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Connect {

private static final String JDBC_DRIVER = "oracle.jdbc.OracleDriver";
private static final String URL_CONNECTION = "jdbc:oracle:thin:@localhost:1521:XE";
private static final String DB_USER = "system";
private static final String DB_PASS = "feca181";

private Connection Conexao;  
private static Connect instancia_conexao = null;  
private ResultSet rs = null;  
private Statement st = null;  

public Connection getConexao(){  
    try{  
        Class.forName(JDBC_DRIVER);  
        Conexao = DriverManager.getConnection(URL_CONNECTION,DB_USER,DB_PASS);  
        System.out.println("Conexão efetuada");  
    }  
    catch(ClassNotFoundException ex){  
        System.out.println("Atenção: não foi encontrado o driver do Oracle \n"+ex.getMessage());  
    }  
    catch(Exception ex){  
        System.out.println("Atenção: Ocorreu problema de conexão com o banco de dados. \nMotivo:"+ex.getMessage());  
    }  
    return Conexao;  

}

}
[/code]

[code]package br.com.wacontactcenter.jdbc.connection;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Connect {

private static final String JDBC_DRIVER = "oracle.jdbc.OracleDriver";
private static final String URL_CONNECTION = "jdbc:oracle:thin:@localhost:1521:XE";
private static final String DB_USER = "login";
private static final String DB_PASS = "senha";

private Connection Conexao;  
private static Connect instancia_conexao = null;  
private ResultSet rs = null;  
private Statement st = null;  

public Connection getConexao(){  
    try{  
        Class.forName(JDBC_DRIVER);  
        Conexao = DriverManager.getConnection(URL_CONNECTION,DB_USER,DB_PASS);  
        System.out.println("Conexão efetuada");  
    }  
    catch(ClassNotFoundException ex){  
        System.out.println("Atenção: não foi encontrado o driver do Oracle \n"+ex.getMessage());  
    }  
    catch(Exception ex){  
        System.out.println("Atenção: Ocorreu problema de conexão com o banco de dados. \nMotivo:"+ex.getMessage());  
    }  
    return Conexao;  

}

}[/code]

estranho ter dado esse erro so na parte da web pq nos exercicios anteriores esta funcionando perfeitamente

deve esta estourando uma exception dentro do seu getConexao, mas como vc esta tratando as excption la dentro a connection ta ficando nulla e logo apos vc tratar a exception vc retorna connection nulla

coloca uma breakpoint nessa linha

Conexao = DriverManager.getConnection(URL_CONNECTION,DB_USER,DB_PASS);

quando estourar a exception pega o log e posta aqui ver-mos

coloca uma breakpoint nessa linha

Conexao = DriverManager.getConnection(URL_CONNECTION,DB_USER,DB_PASS);

quando estourar a exception pega o log e posta aqui ver-mos

Mas se eu pego a classe que testa a minha conexão que ja esta dentro do projeto web e do um play, ela estabelece a conexão, por isso que não estou entendendo esse erro esquisito

Vc tem que debugar meu amigo,

o erro ta sendo causado por causa de outro erro que esta dentro da classe Connect

se vc não pegar o log desse erro agente vai ficar so conjecturando o problema.

vc ja olhou se o driver do oracle ta na pasta WEB-INF/lib do seu projeto web

Sim amigo mas colocando o breakpoint não acontece nada pq não tem erro algum, se eu vo no src e executo uma classe q eu pus la q testa a conexão ela vai funcionar corretamente, não da erro algum, agora eu dei uma mexida no xml e quando clico pra gravar o contato ele diz que o link ta corrompido pois mudei o xml pro erro.

[quote=DaniloAndrade]Vc tem que debugar meu amigo,

o erro ta sendo causado por causa de outro erro que esta dentro da classe Connect

se vc não pegar o log desse erro agente vai ficar so conjecturando o problema.

vc ja olhou se o driver do oracle ta na pasta WEB-INF/lib do seu projeto web[/quote]

o drive do oracle esta na biblioteca do java Resources, não sabia q tinha q colocar nessa pasta tambem

deixa eu tentar explicar uma coisa.

quando o seu o erro estiver ocorrendo na web, não adianta vc debugar pelo seu test porque a causa pode ser o ambiente, então se o erro ta acontecendo no ambiente web de bug pelo ambiente web… o tomcat o jboss todos eles vc consegue debugar pelo eclipse é so vc starta-lo pelo botão de debug do eclipse