Exceção

9 respostas
simberg

Eu estou com um problema, meu sistema acessa dois bancos de dados em dois servidores, funciona muito bem. Porém quando caiu um deles, em páginas que acesso os dois, ocorre erro. Quero tratar esse erro, de forma que se um deles cair, apenas os dados relativos a ele sejam desconsiderados. Pensei em colocar alguma exceção no Connection Factory, mas tudo que testei deu errado.

public class ConnectionFactory {
	public static Connection getConnection() throws SQLException{
		
		try{
			Class.forName("org.postgresql.Driver");
			    return DriverManager.getConnection("jdbc:postgresql://xxxxxxx/yyyyyy","*******","*******");
			    
		}catch(ClassNotFoundException e){
			throw new SQLException(e.getMessage());
		}
	}
}

9 Respostas

simberg

O que eu quero é que se o banco cair, apareça a mensagem de" caiu".

simberg

ninguém?

Rodrigo_Sasaki

Nunca fiz isso… mas qual a exceção que é lançada quando ele não encontra o banco?

simberg

org.postgresql.util.PSQLException

Acho melhor colocar o código de erro.

HTTP Status 500 -

type Exception report

message

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

exception

org.apache.jasper.JasperException: Exception in JSP: /lista_candidatos.jsp:72

69: 						Data
70: 					</td>
71: 				</tr>
72: 		 <c:forEach var="candidatos" items="${dao.lista_todos2}" varStatus="status2">
73: 				<tr>
74: 					<td>
75: 						<a href="bdlista2?numero=${candidatos.codcandidato}"> ${candidatos.codcandidato}</a>


Stacktrace:
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:355)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause

javax.servlet.ServletException: javax.servlet.jsp.el.ELException: An error occurred while getting property "lista_todos2" from an instance of class br.direito.inscricao.dao.ContatoDAO
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:837)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:774)
	org.apache.jsp.lista_005fcandidatos_jsp._jspService(lista_005fcandidatos_jsp.java:148)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause

org.postgresql.util.PSQLException: Conexão negada. Verifique se o nome da máquina e a porta estão corretos e se o postmaster está aceitando conexões TCP/IP.
	org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:136)
	org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66)
	org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:125)
	org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30)
	org.postgresql.jdbc3.Jdbc3Connection.<init>(Jdbc3Connection.java:24)
	org.postgresql.Driver.makeConnection(Driver.java:393)
	org.postgresql.Driver.connect(Driver.java:267)
	java.sql.DriverManager.getConnection(DriverManager.java:582)
	java.sql.DriverManager.getConnection(DriverManager.java:185)
	br.direito.inscricao.ConnectionFactory2.getConnection(ConnectionFactory2.java:13)
	br.direito.inscricao.dao.ContatoDAO.getLista_todos2(ContatoDAO.java:295)
	sun.reflect.GeneratedMethodAccessor138.invoke(Unknown Source)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	java.lang.reflect.Method.invoke(Method.java:597)
	org.apache.commons.el.ArraySuffix.evaluate(ArraySuffix.java:314)
	org.apache.commons.el.ComplexValue.evaluate(ComplexValue.java:145)
	org.apache.commons.el.ExpressionEvaluatorImpl.evaluate(ExpressionEvaluatorImpl.java:264)
	org.apache.commons.el.ExpressionEvaluatorImpl.evaluate(ExpressionEvaluatorImpl.java:190)
	org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:924)
	org.apache.jsp.lista_005fcandidatos_jsp._jspx_meth_c_005fforEach_005f1(lista_005fcandidatos_jsp.java:242)
	org.apache.jsp.lista_005fcandidatos_jsp._jspService(lista_005fcandidatos_jsp.java:135)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause

java.net.ConnectException: Connection refused
	java.net.PlainSocketImpl.socketConnect(Native Method)
	java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
	java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
	java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
	java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
	java.net.Socket.connect(Socket.java:529)
	java.net.Socket.connect(Socket.java:478)
	java.net.Socket.<init>(Socket.java:375)
	java.net.Socket.<init>(Socket.java:189)
	org.postgresql.core.PGStream.<init>(PGStream.java:62)
	org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:76)
	org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66)
	org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:125)
	org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30)
	org.postgresql.jdbc3.Jdbc3Connection.<init>(Jdbc3Connection.java:24)
	org.postgresql.Driver.makeConnection(Driver.java:393)
	org.postgresql.Driver.connect(Driver.java:267)
	java.sql.DriverManager.getConnection(DriverManager.java:582)
	java.sql.DriverManager.getConnection(DriverManager.java:185)
	br.direito.inscricao.ConnectionFactory2.getConnection(ConnectionFactory2.java:13)
	br.direito.inscricao.dao.ContatoDAO.getLista_todos2(ContatoDAO.java:295)
	sun.reflect.GeneratedMethodAccessor138.invoke(Unknown Source)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	java.lang.reflect.Method.invoke(Method.java:597)
	org.apache.commons.el.ArraySuffix.evaluate(ArraySuffix.java:314)
	org.apache.commons.el.ComplexValue.evaluate(ComplexValue.java:145)
	org.apache.commons.el.ExpressionEvaluatorImpl.evaluate(ExpressionEvaluatorImpl.java:264)
	org.apache.commons.el.ExpressionEvaluatorImpl.evaluate(ExpressionEvaluatorImpl.java:190)
	org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:924)
	org.apache.jsp.lista_005fcandidatos_jsp._jspx_meth_c_005fforEach_005f1(lista_005fcandidatos_jsp.java:242)
	org.apache.jsp.lista_005fcandidatos_jsp._jspService(lista_005fcandidatos_jsp.java:135)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5 logs.
Rodrigo_Sasaki

tente tratar a exceção em um bloco try/catch dessa maneira:

public class ConnectionFactory {  
    public static Connection getConnection() throws SQLException{  
          
        try{  
            Class.forName("org.postgresql.Driver");  
                return DriverManager.getConnection("jdbc:postgresql://xxxxxxx/yyyyyy","*******","*******");  
                  
        }catch(ClassNotFoundException e){  
            throw new SQLException(e.getMessage());  
        }catch(PSQLException e){
            if(e.getCause() instanceof ConnectException){
                //Aqui você lança sua mensagem
            }
        }  
    }  
}
B

Digao.

Tenta capturar PSQLException.
Ao ocorrer uma Exception você pode escrever em arquivo de log, acho que fica melhor.

Abs.

Rodrigo_Sasaki

bruno.jpw:
Digao.

Tenta capturar PSQLException.
Ao ocorrer uma Exception você pode escrever em arquivo de log, acho que fica melhor.

Abs.

Não entendi… Tudo o que eu fiz foi tratar a exceção específica lançada ao não conseguir conexão com o banco, pra ele poder conseguir lançar a mensagem que ele quer pro usuário.

simberg

Obrigado!

Vou testar de depois posto.

simberg

Pessoal, deu certo!!!

Coloquei a exceção no ConnectionFactory, perfeito.

Mas quando fazia inclusão dos candidatos, verificava nos dois bancos de dados, se havia, por exemplo repetição de CPF, para que o usuário não cadastrasse o mesmo CPF nos dois bancos, só que quando caiu um dos bancos, dava pau. Tive que colocar também, nessa servlet que populava para envio para o DAO, aquela que recebe as informações da página JSP, ok. O nome é BdInclusaoCandidatos, só que a exceção é outra, a java.lang.NullPointerException.

E na classe ContatoDAO, quando precisava acessar os dois bancos simultâneamente, coloquei a: java.lang.NullPointerException.

Deu mais trabalho, mas agora funciona.

Obrigado pela força!!!

RESOLVIDO

Criado 19 de abril de 2012
Ultima resposta 23 de abr. de 2012
Respostas 9
Participantes 3