JDBC + Firebird: perdendo a conexão aleatoriamente

Tenho uma aplicação desktop que se conecta diretamente no banco de dados firebird 1.03 usando JDBC. Uso sempre PreparedStatements.

O que acontece é que, aleatoriamente, a conexão é perdida com, por exemplo, a exceção abaixo. Não é somente essa que ocorre. Já ví várias outras, como ArrayIndexOutOfBounds em uns métodos relacionados à PreparedStatement. Descarto problemas com as instruções SQL porque o mesmo código que executa o dia inteiro em momentos aleatórios falha.

No desespero eu fiz uma classe que garante uma conexão por thread, porque quando o erro começou desconfiei de problemas de sincronismo. Não usei o pool do JayBird.

Eis uns dos erros. O interessante é a mensagem ‘…request to rost “”’. Porque o host está vazio nestes casos? Percebam que a origem é diferente nos dois erros.

Obrigado pela atenção.

org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544721. Unable to complete network request to host "". 
Reason: Unable to complete network request to host "". 
	at org.firebirdsql.jdbc.InternalTransactionCoordinator$AutoCommitCoordinator.ensureTransaction(InternalTransactionCoordinator.java:224) 
	at org.firebirdsql.jdbc.InternalTransactionCoordinator$AutoCommitCoordinator.executionStarted(InternalTransactionCoordinator.java:213) 
	at org.firebirdsql.jdbc.InternalTransactionCoordinator.executionStarted(InternalTransactionCoordinator.java:38) 
	at org.firebirdsql.jdbc.AbstractStatement.notifyStatementStarted(AbstractStatement.java:235) 
	at org.firebirdsql.jdbc.AbstractStatement.notifyStatementStarted(AbstractStatement.java:226) 
	at org.firebirdsql.jdbc.AbstractPreparedStatement.<init>(AbstractPreparedStatement.java:121) 
	at org.firebirdsql.jdbc.FBPreparedStatement.<init>(FBPreparedStatement.java:41) 
	at sun.reflect.GeneratedConstructorAccessor1.newInstance(Unknown Source) 
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
	at java.lang.reflect.Constructor.newInstance(Unknown Source) 
	at org.firebirdsql.jdbc.FBStatementFactory.createPreparedStatement(FBStatementFactory.java:90) 
	at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:869) 
	at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:824) 
	at org.manfra.sam.conexao.Conexao.preparar(Conexao.java:87) 
	at org.manfra.sam.negocio.dao.db.CadastroDAO.getCadastros(CadastroDAO.java:223) 
	at org.manfra.sam.negocio.dao.db.CadastroDAO.pesquisa(CadastroDAO.java:270) 
	at org.manfra.sam.negocio.model.cadastro.Cadastros.pesquisa(Cadastros.java:43) 
	at org.manfra.sam.negocio.model.cadastro.Cadastros.pesquisaPorNomeOuNomeFantasia(Cadastros.java:96) 
	at org.manfra.sam.forms.cadastro.pesquisa.SelecionaCadastroFrame.pesquisar(SelecionaCadastroFrame.java:458) 
	at org.manfra.sam.forms.cadastro.pesquisa.SelecionaCadastroFrame.edNomeKeyTyped(SelecionaCadastroFrame.java:367) 
	at org.manfra.sam.forms.cadastro.pesquisa.SelecionaCadastroFrame.access$500(SelecionaCadastroFrame.java:41) 
	at org.manfra.sam.forms.cadastro.pesquisa.SelecionaCadastroFrame$3.keyTyped(SelecionaCadastroFrame.java:204) 
	at java.awt.Component.processKeyEvent(Unknown Source) 
	at javax.swing.JComponent.processKeyEvent(Unknown Source) 
	at java.awt.Component.processEvent(Unknown Source) 
	at java.awt.Container.processEvent(Unknown Source) 
	at java.awt.Component.dispatchEventImpl(Unknown Source) 
	at java.awt.Container.dispatchEventImpl(Unknown Source) 
	at java.awt.Component.dispatchEvent(Unknown Source) 
	at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source) 
	at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source) 
	at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source) 
	at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source) 
	at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source) 
	at java.awt.Component.dispatchEventImpl(Unknown Source) 
	at java.awt.Container.dispatchEventImpl(Unknown Source) 
	at java.awt.Window.dispatchEventImpl(Unknown Source) 
	at java.awt.Component.dispatchEvent(Unknown Source) 
	at java.awt.EventQueue.dispatchEvent(Unknown Source) 
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
	at java.awt.Dialog$1.run(Unknown Source) 
	at java.awt.Dialog$3.run(Unknown Source) 
	at java.security.AccessController.doPrivileged(Native Method) 
	at java.awt.Dialog.show(Unknown Source) 
	at java.awt.Component.show(Unknown Source) 
	at java.awt.Component.setVisible(Unknown Source) 
	at java.awt.Window.setVisible(Unknown Source) 
	at java.awt.Dialog.setVisible(Unknown Source) 
	at org.manfra.sam.forms.cadastro.pesquisa.SelecionaCadastroFrame.getCadastro(SelecionaCadastroFrame.java:497) 
	at org.manfra.sam.forms.cadastro.pesquisa.SelecionaCadastroFrame.getCadastro(SelecionaCadastroFrame.java:521) 
	at org.manfra.sam.forms.notafiscal.edicao.abas.InformacoesPrimariasPanel.pesquisarCadastro(InformacoesPrimariasPanel.java:829) 
	at org.manfra.sam.forms.notafiscal.edicao.abas.InformacoesPrimariasPanel.btnClienteActionPerformed(InformacoesPrimariasPanel.java:541) 
	at org.manfra.sam.forms.notafiscal.edicao.abas.InformacoesPrimariasPanel.access$400(InformacoesPrimariasPanel.java:47) 
	at org.manfra.sam.forms.notafiscal.edicao.abas.InformacoesPrimariasPanel$5.actionPerformed(InformacoesPrimariasPanel.java:215) 
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) 
	at java.awt.Component.processMouseEvent(Unknown Source) 
	at javax.swing.JComponent.processMouseEvent(Unknown Source) 
	at java.awt.Component.processEvent(Unknown Source) 
	at java.awt.Container.processEvent(Unknown Source) 
	at java.awt.Component.dispatchEventImpl(Unknown Source) 
	at java.awt.Container.dispatchEventImpl(Unknown Source) 
	at java.awt.Component.dispatchEvent(Unknown Source) 
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
	at java.awt.Container.dispatchEventImpl(Unknown Source) 
	at java.awt.Window.dispatchEventImpl(Unknown Source) 
	at java.awt.Component.dispatchEvent(Unknown Source) 
	at java.awt.EventQueue.dispatchEvent(Unknown Source) 
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
	at java.awt.Dialog$1.run(Unknown Source) 
	at java.awt.Dialog$3.run(Unknown Source) 
	at java.security.AccessController.doPrivileged(Native Method) 
	at java.awt.Dialog.show(Unknown Source) 
	at java.awt.Component.show(Unknown Source) 
	at java.awt.Component.setVisible(Unknown Source) 
	at java.awt.Window.setVisible(Unknown Source) 
	at java.awt.Dialog.setVisible(Unknown Source) 
	at org.manfra.sam.forms.notafiscal.edicao.NotaFiscalFrame.<init>(NotaFiscalFrame.java:137) 
	at org.manfra.sam.controller.notafiscal.gerenciamento.GerenciamentoNFController.nova(GerenciamentoNFController.java:77) 
	at org.manfra.sam.forms.notafiscal.gerenciamento.GerenciaNFFrame.inserir(GerenciaNFFrame.java:440) 
	at org.manfra.sam.forms.notafiscal.gerenciamento.GerenciaNFFrame.btInserirActionPerformed(GerenciaNFFrame.java:222) 
	at org.manfra.sam.forms.notafiscal.gerenciamento.GerenciaNFFrame.access$600(GerenciaNFFrame.java:36) 
	at org.manfra.sam.forms.notafiscal.gerenciamento.GerenciaNFFrame$6.actionPerformed(GerenciaNFFrame.java:126) 
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) 
	at java.awt.Component.processMouseEvent(Unknown Source) 
	at javax.swing.JComponent.processMouseEvent(Unknown Source) 
	at java.awt.Component.processEvent(Unknown Source) 
	at java.awt.Container.processEvent(Unknown Source) 
	at java.awt.Component.dispatchEventImpl(Unknown Source) 
	at java.awt.Container.dispatchEventImpl(Unknown Source) 
	at java.awt.Component.dispatchEvent(Unknown Source) 
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
	at java.awt.Container.dispatchEventImpl(Unknown Source) 
	at java.awt.Window.dispatchEventImpl(Unknown Source) 
	at java.awt.Component.dispatchEvent(Unknown Source) 
	at java.awt.EventQueue.dispatchEvent(Unknown Source) 
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
	at java.awt.EventDispatchThread.run(Unknown Source) 
at org.firebirdsql.gds.GDSException: Unable to complete network request to host "". 
	at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.iscStartTransaction(AbstractJavaGDSImpl.java:737) 
	at org.firebirdsql.gds.impl.GDSHelper.startTransaction(GDSHelper.java:583) 
	at org.firebirdsql.jca.FBManagedConnection.findIscTrHandle(FBManagedConnection.java:1006) 
	at org.firebirdsql.jca.FBManagedConnection.internalStart(FBManagedConnection.java:925) 
	at org.firebirdsql.jca.FBLocalTransaction.internalBegin(FBLocalTransaction.java:140) 
	at org.firebirdsql.jca.FBLocalTransaction.begin(FBLocalTransaction.java:112) 
	at org.firebirdsql.jdbc.InternalTransactionCoordinator$AutoCommitCoordinator.ensureTransaction(InternalTransactionCoordinator.java:222) 
	at org.firebirdsql.jdbc.InternalTransactionCoordinator$AutoCommitCoordinator.executionStarted(InternalTransactionCoordinator.java:213) 
	at org.firebirdsql.jdbc.InternalTransactionCoordinator.executionStarted(InternalTransactionCoordinator.java:38) 
	at org.firebirdsql.jdbc.AbstractStatement.notifyStatementStarted(AbstractStatement.java:235) 
	at org.firebirdsql.jdbc.AbstractStatement.notifyStatementStarted(AbstractStatement.java:226) 
	at org.firebirdsql.jdbc.AbstractPreparedStatement.<init>(AbstractPreparedStatement.java:121) 
	at org.firebirdsql.jdbc.FBPreparedStatement.<init>(FBPreparedStatement.java:41) 
	at sun.reflect.GeneratedConstructorAccessor1.newInstance(Unknown Source) 
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
	at java.lang.reflect.Constructor.newInstance(Unknown Source) 
	at org.firebirdsql.jdbc.FBStatementFactory.createPreparedStatement(FBStatementFactory.java:90) 
	at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:869) 
	at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:824) 
	at org.manfra.sam.conexao.Conexao.preparar(Conexao.java:87) 
	at org.manfra.sam.negocio.dao.db.CadastroDAO.getCadastros(CadastroDAO.java:223) 
	at org.manfra.sam.negocio.dao.db.CadastroDAO.pesquisa(CadastroDAO.java:270) 
	at org.manfra.sam.negocio.model.cadastro.Cadastros.pesquisa(Cadastros.java:43) 
	at org.manfra.sam.negocio.model.cadastro.Cadastros.pesquisaPorNomeOuNomeFantasia(Cadastros.java:96) 
	at org.manfra.sam.forms.cadastro.pesquisa.SelecionaCadastroFrame.pesquisar(SelecionaCadastroFrame.java:458) 
	at org.manfra.sam.forms.cadastro.pesquisa.SelecionaCadastroFrame.edNomeKeyTyped(SelecionaCadastroFrame.java:367) 
	at org.manfra.sam.forms.cadastro.pesquisa.SelecionaCadastroFrame.access$500(SelecionaCadastroFrame.java:41) 
	at org.manfra.sam.forms.cadastro.pesquisa.SelecionaCadastroFrame$3.keyTyped(SelecionaCadastroFrame.java:204) 
	at java.awt.Component.processKeyEvent(Unknown Source) 
	at javax.swing.JComponent.processKeyEvent(Unknown Source) 
	at java.awt.Component.processEvent(Unknown Source) 
	at java.awt.Container.processEvent(Unknown Source) 
	at java.awt.Component.dispatchEventImpl(Unknown Source) 
	at java.awt.Container.dispatchEventImpl(Unknown Source) 
	at java.awt.Component.dispatchEvent(Unknown Source) 
	at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source) 
	at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source) 
	at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source) 
	at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source) 
	at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source) 
	at java.awt.Component.dispatchEventImpl(Unknown Source) 
	at java.awt.Container.dispatchEventImpl(Unknown Source) 
	at java.awt.Window.dispatchEventImpl(Unknown Source) 
	at java.awt.Component.dispatchEvent(Unknown Source) 
	at java.awt.EventQueue.dispatchEvent(Unknown Source) 
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
	at java.awt.Dialog$1.run(Unknown Source) 
	at java.awt.Dialog$3.run(Unknown Source) 
	at java.security.AccessController.doPrivileged(Native Method) 
	at java.awt.Dialog.show(Unknown Source) 
	at java.awt.Component.show(Unknown Source) 
	at java.awt.Component.setVisible(Unknown Source) 
	at java.awt.Window.setVisible(Unknown Source) 
	at java.awt.Dialog.setVisible(Unknown Source) 
	at org.manfra.sam.forms.cadastro.pesquisa.SelecionaCadastroFrame.getCadastro(SelecionaCadastroFrame.java:497) 
	at org.manfra.sam.forms.cadastro.pesquisa.SelecionaCadastroFrame.getCadastro(SelecionaCadastroFrame.java:521) 
	at org.manfra.sam.forms.notafiscal.edicao.abas.InformacoesPrimariasPanel.pesquisarCadastro(InformacoesPrimariasPanel.java:829) 
	at org.manfra.sam.forms.notafiscal.edicao.abas.InformacoesPrimariasPanel.btnClienteActionPerformed(InformacoesPrimariasPanel.java:541) 
	at org.manfra.sam.forms.notafiscal.edicao.abas.InformacoesPrimariasPanel.access$400(InformacoesPrimariasPanel.java:47) 
	at org.manfra.sam.forms.notafiscal.edicao.abas.InformacoesPrimariasPanel$5.actionPerformed(InformacoesPrimariasPanel.java:215) 
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) 
	at java.awt.Component.processMouseEvent(Unknown Source) 
	at javax.swing.JComponent.processMouseEvent(Unknown Source) 
	at java.awt.Component.processEvent(Unknown Source) 
	at java.awt.Container.processEvent(Unknown Source) 
	at java.awt.Component.dispatchEventImpl(Unknown Source) 
	at java.awt.Container.dispatchEventImpl(Unknown Source) 
	at java.awt.Component.dispatchEvent(Unknown Source) 
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
	at java.awt.Container.dispatchEventImpl(Unknown Source) 
	at java.awt.Window.dispatchEventImpl(Unknown Source) 
	at java.awt.Component.dispatchEvent(Unknown Source) 
	at java.awt.EventQueue.dispatchEvent(Unknown Source) 
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
	at java.awt.Dialog$1.run(Unknown Source) 
	at java.awt.Dialog$3.run(Unknown Source) 
	at java.security.AccessController.doPrivileged(Native Method) 
	at java.awt.Dialog.show(Unknown Source) 
	at java.awt.Component.show(Unknown Source) 
	at java.awt.Component.setVisible(Unknown Source) 
	at java.awt.Window.setVisible(Unknown Source) 
	at java.awt.Dialog.setVisible(Unknown Source) 
	at org.manfra.sam.forms.notafiscal.edicao.NotaFiscalFrame.<init>(NotaFiscalFrame.java:137) 
	at org.manfra.sam.controller.notafiscal.gerenciamento.GerenciamentoNFController.nova(GerenciamentoNFController.java:77) 
	at org.manfra.sam.forms.notafiscal.gerenciamento.GerenciaNFFrame.inserir(GerenciaNFFrame.java:440) 
	at org.manfra.sam.forms.notafiscal.gerenciamento.GerenciaNFFrame.btInserirActionPerformed(GerenciaNFFrame.java:222) 
	at org.manfra.sam.forms.notafiscal.gerenciamento.GerenciaNFFrame.access$600(GerenciaNFFrame.java:36) 
	at org.manfra.sam.forms.notafiscal.gerenciamento.GerenciaNFFrame$6.actionPerformed(GerenciaNFFrame.java:126) 
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) 
	at java.awt.Component.processMouseEvent(Unknown Source) 
	at javax.swing.JComponent.processMouseEvent(Unknown Source) 
	at java.awt.Component.processEvent(Unknown Source) 
	at java.awt.Container.processEvent(Unknown Source) 
	at java.awt.Component.dispatchEventImpl(Unknown Source) 
	at java.awt.Container.dispatchEventImpl(Unknown Source) 
	at java.awt.Component.dispatchEvent(Unknown Source) 
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
	at java.awt.Container.dispatchEventImpl(Unknown Source) 
	at java.awt.Window.dispatchEventImpl(Unknown Source) 
	at java.awt.Component.dispatchEvent(Unknown Source) 
	at java.awt.EventQueue.dispatchEvent(Unknown Source) 
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
	at java.awt.EventDispatchThread.run(Unknown Source) 

Tentei usar o ConnectionPool do Jaybird 2.1.6 mas o problema persiste.

Já tive que ouvir hoje que “talvez o java não seja tão robusto” em relação ao Delphi.