hello,
J'ai une appli java qui se connecte à interbase 6.01 via interclient 2.5 .
Cette application fonctionne parfaitement bien quand le tout (appli et base de données) est installé sous windows XP.
Par contre lorsque je migre tout ça sur un serveur linux (redhat7.2), plus rien ne va!
En fait au vue des messages d'erreurs, il semblerait que mon application n'arrive pas à garder de connection avec la base de données!
Donc si je ne recrée pas explicitement une connection à chaque fois que je veux accéder à la base, ça me fait une erreur.
J'ouvre ma connection avec le code suivant :
Ensuite j'utilise :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 public void connectBase() { DataSource dataSource = new interbase.interclient.DataSource(); try { // Set the standard properties dataSource.setNetworkProtocol("jdbc:interbase:"); /* set the network protocol */ dataSource.setServerName("localhost"); /* the hostname or IP address of the server */ dataSource.setDatabaseName("/opt/base/MaBase"); /* the full path to your database file */ dataSource.setPortNumber(3060); /* the TCP port Interclient listens on by default */ dataSource.setLoginTimeout(10); /* set the login timeout to 10 seconds */ // Set the non-standard properties dataSource.setSweepOnConnect(false); /* Perform a sweep when connecting */ // The following line actually starts up the database connection: this.con = dataSource.getConnection("login","password"); } catch ( SQLException se ) { // Report the problem to the standard error stream: System.err.println("Problème de connection à la base de donnée: "+se); } }
ou la fonction disconnectBase est écrite comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 int param1, param2; string param3; bd=new BD(); bd.connectBase(); sment=bd.getPreparedStatement("execute procedure maProcedure(?, ?, ?);"); for(Iterator it=col.iterator() ; it.hasNext() ; ) { [...] sment.setInt(1, param1); sment.setInt(2, param2); sment.setString(3, param3); sment.execute(); [...] } bd.disconnectBase();
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public void disconnectBase() { try { con.close(); con=null; } catch ( SQLException se ) { se.printStackTrace(); } }
A l'exécution, les 2 premières exécution de sment.execute() passe bien, mais à la 3e j'obtiens l'erreur :
et aux exécutions suivantes l'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 interbase.interclient.CommunicationException: [interclient] Communication error: An IO exception occurred while trying to receive data from server localhost. The message of the IOException is "Connection reset". See API reference for exception interbase.interclient.CommunicationException at interbase.interclient.JDBCNet.receiveMessage(Unknown Source) at interbase.interclient.JDBCNet.sendAndReceiveMessage(Unknown Source) at interbase.interclient.PreparedStatement.remote_EXECUTE_PREPARED_STATEMENT(Unknown Source) at interbase.interclient.PreparedStatement.execute(Unknown Source) at trail.utils.FonctionBD.replacePassage(FonctionBD.java:57) at trail.server.Traitement.run(Traitement.java:113) at java.lang.Thread.run(Unknown Source)
J'ai donc l'impression que la connexion à la base n'arrive pas à restée ouverte, mais je ne sais pas pourquoi. Sur la version Windows, je n'avais pas de souci, elle restait ouverte.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 interbase.interclient.CommunicationException: [interclient] Communication error: An IO exception occurred while trying to send data to server localhost. The message of the IOException is "Broken pipe". See API reference for exception interbase.interclient.CommunicationException at interbase.interclient.JDBCNet.sendMessage(Unknown Source) at interbase.interclient.JDBCNet.sendAndReceiveMessage(Unknown Source) at interbase.interclient.PreparedStatement.remote_EXECUTE_PREPARED_STATEMENT(Unknown Source) at interbase.interclient.PreparedStatement.execute(Unknown Source) at trail.utils.FonctionBD.replacePassage(FonctionBD.java:57) at trail.server.Traitement.run(Traitement.java:113) at java.lang.Thread.run(Unknown Source)
Je suis vraiment très embêtée car mon application doit tourner en permanence pendant 48H pour récupérer et intégrer des données servant à la gestion et surtout la sécurité d'une course pédestre, et je ne peux pas me permettre de perdre des données.
En plus je ne peux pas revenir vers un serveur windows, car je suis tenue de fonctionner sur linux pour l'hébergement.
Si quelqu'un a une idée, je lui en serait vraiment très reconnaissante...
merci d'avance
Isabelle
Partager