Olá galera, conforme meu status eu sou novo aqui no fórum e relativamente novo em desenv de aplicações Java. Noentanto acredito ter uma questão meio que “cabalística” para os srs. Já li muitos tópicos inclusive em outros fórums com questões parecidas com esta mas nenhuma com sintomas e consequentemente com a mesma solução.
Aí vai:
Desenvolvi uma aplicação java que faz as operações básicas CRUD a um banco de dados Oracle 10g Xe. O problema é que quando eu executo a aplicação, esta despois de aproximadamente 25 ou 30 min me retorna o seguinte erro em caixa de texto de aviso: Exceção de E/S: The Network Adapter could not establish the connection. Todas as estações onde a aplicação deveria rodar possuem o S.O. Windows XP Service pack3 (ainda rs).
O SGBD está rodando em outra máquina dentro de uma LAN. O driver usado para a conexão é o ojdbc14.jar.
Até aí td bem. De acordo com outros tópicos seria na maioria dos casos problema de rede ou sintaxe de conexão errada porém:
1 - Posso assegurar que não é problema de rede. Na mesma máquina com um perfil diferente eu consigo rodá-la sem problemas. Aliás, ela funcionou bem durante um bom tempo no perfil de um usuário q hj apresenta problemas ao executá-la.
2 - Não é problema de sintaxe de conexão, vide o item “1” e o fato de eu já ter usado estas duas sintaxes de url para o DriverManager : a)“jdbc:oracle:thin:@//20.1.0.200:1521/XE” b)“jdbc:oracle:thin:20.1.0.200:1521:xe”.
3 - Como dito no item 1, se eu rodar a mesma aplicação clicando em cima do executável (utilizei o JSmooth para criá-lo) e mandando executar como um outro usuário qualquer ela roda sem problemas.
4 - Isso acontece em qualquer máquina dentro da rede apenas com o(s) mesmo(s) usuário(s) (Domínio AD Microsoft Win2008 Server - A aplicação faz autenticação pelo LDAP através de uma classe criada).
Abaixo segue a classe de conexão e um StackTrace para “apreciação”.
Agradeço desde já a atenção dos srs…
java.sql.SQLException: Exceção de E/S: The Network Adapter could not establish the connection
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:124)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:161)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:273)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:327)
at oracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.java:360)
at oracle.jdbc.driver.T4CConnection.(T4CConnection.java:150)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:31)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:595)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at controle_equipamentos.ConectaBD.getConnection(ConectaBD.java:26)
at controle_equipamentos.Consultas.ConsultaAdmins(Consultas.java:167)
at controle_equipamentos.Autenticar.Validar(Autenticar.java:59)
at controle_equipamentos.Controle_equipamentosView.(Controle_equipamentosView.java:46)
at controle_equipamentos.Controle_equipamentosApp.startup(Controle_equipamentosApp.java:19)
at org.jdesktop.application.Application$1.run(Application.java:171)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
Exceção de E/S: The Network Adapter could not establish the connection
null
class java.sql.SQLException
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
[Ljava.lang.StackTraceElement;@1ea0252
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
java.sql.SQLException: Exceção de E/S: The Network Adapter could not establish the connection
at controle_equipamentos.ConectaBD.getConnection(ConectaBD.java:38)
at controle_equipamentos.Consultas.ConsultaAdmins(Consultas.java:167)
at controle_equipamentos.Autenticar.Validar(Autenticar.java:59)
at controle_equipamentos.Controle_equipamentosView.(Controle_equipamentosView.java:46)
at controle_equipamentos.Controle_equipamentosApp.startup(Controle_equipamentosApp.java:19)
at org.jdesktop.application.Application$1.run(Application.java:171)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Não autenticado :java.lang.NullPointerException
EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Qualquer informação que possa estar faltando escrever q eu passo.
Agradeço + uma vez desde já!
Já que está difícil, vou te passar algumas dicas que poderiam resolver, e caso resolva, me avise…
Nas máquinas locais, onde você executa o programa, siga os passos:
Iniciar/Executar: cliconfg
Se não estiver, marcar a opção “Habilitar protocolo de memória compartilhada”
Habilitar Pipes Nomeados e TCP/IP, em TCP/IP clicar em propriedades e colocar a porta padrão do Oracle, 1521
Na “ABA” Alias, em Alias do Servidor colocar o nome do servidor que está rodando o SGDB, marcar TCP/IP, no nome do servidor pode colocar o ip do mesmo
Você pode desmarcar a opção Determinar porta dinamicamente e colocar a porta que é usada pelo Oracle, no caso (1521)
Já tive problemas com conexão do MSSQL, caia às vezes, fazendo isso resolveu o problema.
Tente fazer esse procedimento, e ver se resolve.
Enquanto isso podemos pensar em outra opção.
Opa amigo, boa tarde… só vi a msg agora!!!
Cara, mto obrigado só por responder a minha msg, valeu mesmo.
Vou tentar alterar estas configs e já posto aqui.
duezito,
Fiz as alterações tal como vc postou, ainda dei aquela “reiniciada básica”,
voltei ao painel do “cliconfg” para me certificar que as alterações ainda estavam
lá (e estavam), mandei rodar a aplicação… mas nada.
Noentanto já que vc me respondeu, eu tenho mais algumas informações que podem
ser valiosas para a resolução do problema. Não postei antes estas informações pq achei que
o tópico já estava grande demais e não queria desanimar a galera…rs.
1.a: Por incrível e estranho que pareça, esta aplicação já voltou a funcionar do nada! E
da mesma forma parou também! Foi por umas 3 vezes sendo o tempo muito intermitente. Tipo,
um certo dia ela passa a funcionar (só em uma das máquinas) e depois de uma semana rodando sem problemas
ela pára, voltando a rodar depois de uns mêses… Acho que criei sem querer um tipo de organismo vivo cibernético
com capacidade de adquirir inteligência própria e que futuramente se chamará SkyNet, produzirá ciborgues e dominará a terra… temos que impedí-la
corrigindo este defeito…
2.a Já coloquei na ponta cliente, um analizador de protocolos (Wireshark) para ver o fluxo de conversa entre esta e a estação
onde se encontra o SGBD. O curioso é que qndo eu inicio a aplicação no perfil do usuário onde hoje a aplicação não roda, realmente não há
fluxo de conversa entre a máquina cliente e a servidora(onde se encontra o SGBD). Porém qndo eu executo essa aplicação demoníaca rodando com
a conta de outro usuário… está lá, o fluxo de conversa a nível de protocolo, a aplicação rodando… td mto bonito, td mto bem…
3.a: Já executei comandos de teste de conexão entre a máquina cliente e a máq onde está o SGBD no perfil do usuário o qual a aplicação não roda
usadno a ferramenta TNSPING.EXE… e td parece estar ok.
4.a: [b]Já executei o debug através da minha ferramenta de desenvolvimento. Depois de seguir a fonte do problema, percebi que a aplicação pára de rodar
no momento em que está executando métodos dentro da classe do DriverManager.
Tomara que estas informações possam ajudar!!!
Obrigado + uma vez pela atenção.
Abraço!
Nesse caso, o usuário local, está como administradores do domínio?
E por exemplo, você disse que no usuário logado não funciona corretamente, se você executar com outro usuário funciona.
E se você logar com outro usuário, e executar com este que não funcionava, funciona?
Que negócio curioso.
Você está usando qual linguagem?
O usuário comum do domínio é usuário administrador da máquina.
Realmente, se eu estiver logado com um usuário que não roda a aplicação e fizer um “executar como”
com a conta de outro usuário, a aplicação roda normalmente.
Se eu estiver logado com o usuário que eu usei para abrir a aplicação dentro do perfil de outro que não abre a mesma
a aplicação rodará sem problemas…
Sobre a última pergunta eu posso não ter entendido mto bem: A liguagem de desenvolvimento que eu uso é Java.
Mais uma informação: (Na estação e perfil de um usuário onde a aplicação não roda)
Dentro do compilador(por desespero, eu instalei o compilador na máquina do usuário), qndo eu troco a sintaxe de conexão do banco de dados por qualquer uma outra, por mais absurda q seja e mando executar o projeto:
Ex.:
private static final String url = “jdbc:oracle:thin:@//blá,blá,blá:1521/XE”;
o programa apresenta os mesmos sintomas(demora uns 20…30min e depois vem a mensagem: Exceção de E/S: The network adapter could not estabilish the onnection.).
Ou seja, a meu ver, ele nem sequer chega a conversar com o SGBD para “conferir” a sintaxe de conexão…
Não sei mais o que pode ser! Já fiz todos os testes de conexão a nível de resposta da máquina ou do SGBD a partir do perfil do usuário onde a aplicação não roda e a comunicação é efetuada com sucesso!
Sei que este tópico já estava esquecido, mas só pra deixar um “report” final, posto aqui
que infelizmente tive que migrar temporariamente e desesperadamente a base de dados
para o… MS Access :oops: . Vergonhoso…rs
Acho o Oracle um baita de um SGBD, mto f0D@ mesmo. Porém este problema, que persiste
comigo e com muitos outros, me impossibilitou de continuar usando o mesmo… temporariamente.
Com o Access pelo menos está funfando e eu não posso deixar usuário esperando…
Irei ainda reinstalar o Oracle no servidor e ver no q dá.
Mesmo assim agradeço à todos que pelo menos leram este tópico e ao duezito que tentou me ajudar!!
vlw!
Seguinte, você está usando Threads neste programa?
Tive um problema esses dias que dava um erro parecido de conexão, e era porque eu não dava um con.close();
Tenta fazer uma verificação assim (editando seu exemplo):
// Antes de fazer alguma consulta, ou usar algum objeto vc fecha a conexão se ela ainda estiver aberta…
if (!con.isClosed()) {
con.close();
}
// Testa a conexão se está null ou se está fechada, e cria…
if (connection == null || connection.isClosed()){
connection = DriverManager.getConnection(url, “info_drn”, “podbot”);
}
Pode ser que de alguma forma ele tentava criar uma conexão novamente com erro, talvez…
Neste caso a conexão é fechada e criada toda vez que é preciso.
Tenta ai e avisa qualquer coisa. Pra mim resolveu!
Oi! Acabei de passar pelo mesmo problema. No meu caso, eu acesso o Banco de Dados do Cliente via VPN (Virtual Private Network). O meu IP não estava dentro do range de IPs autorizados pelo Firewall do Cliente. A solução foi trocar meu IP por um em que estivesse dentro do range de IPs autorizados pelo Firewall do cliente.