Rattraper une exception qui n'en est pas une

Rattraper une exception qui n'en est pas une - Java - Programmation

Marsh Posté le 29-03-2004 à 18:27:38    

Salut, je voudrais savoir si vous savez comment rattraper une erreur qui vient d'un driver jdbc...
 

Code :
  1. Backend start-up failed: FATAL:  Sorry, too many clients already
  2. at org.postgresql.jdbc1.AbstractJdbc1Connection.openConnection(AbstractJdbc1Connection.java:306)
  3. at org.postgresql.Driver.connect(Driver.java:122)
  4. at java.sql.DriverManager.getConnection(DriverManager.java:512)
  5. at java.sql.DriverManager.getConnection(DriverManager.java:171)
  6. [...]


 
C'est pas une exception, et je ne sais pas comment récupérer un truc comme ça.
je n'ai jamais vu ça avant, et je n'ai rien trouvé en faisant une recherche...
merci d'avance :jap:


Message édité par Predicator le 30-03-2004 à 09:21:26
Reply

Marsh Posté le 29-03-2004 à 18:27:38   

Reply

Marsh Posté le 29-03-2004 à 19:26:57    

Rhoooo, il y a un goret qui a mis un exit après avoir fait un stacktrace :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 29-03-2004 à 19:36:31    

j'ai rien compris ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 29-03-2004 à 20:16:13    

benou a écrit :

j'ai rien compris ...

Je pense que monsieur confond la chaîne de cause des exceptions et les noms des méthodes dans la tacktrace. Ou alors il a désigné l'étage ou il veut arrêter (catch) la remontée ou débugger.
 
Oué en fait j'en sais pas plus que toi ...


Message édité par nraynaud le 29-03-2004 à 20:17:02

---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 30-03-2004 à 09:19:04    

- y'a pas de exit
- je ne confonds rien
 
ce truc apparait dans aucun stacktrace... il ne rentre dans aucun cas de catch, c'est un message d'erreur que je reçois lorsque je fais appel au driver jdbc et qu'il ne peut pas ouvrir de connexion.
 
si c'était une simple exception, je pense que je saurais comment la récupérer :o
 
donc comme c'est pas une exception, je ne sais pas comment récupérer cette erreur... et j'aimerais bien pouvoir le faire quand même
 
si c'est le premier code qui vous gêne, ne vous en occupez pas, il est juste là pour servir de témoin [:spamafote]  
d'ailleurs je vais l'enlever, hop.


Message édité par Predicator le 30-03-2004 à 09:20:42
Reply

Marsh Posté le 30-03-2004 à 11:06:22    

Le pb vient pas du fait que le coder du driver jdbc à fait un e.printStackTrace(System.err) puis n'a pas relancé l'exception en l'enveloppant éventuellement dans une SQLException ?

Reply

Marsh Posté le 30-03-2004 à 11:08:40    

C'est quelle version du driver jdbc, histoire d'aller  lire les sources ?


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 30-03-2004 à 12:09:20    

http://java.sun.com/j2se/1.4.2/doc [...] rning.html
 
maintenant, c'est bizarre qu'il foute un warning et loggent un FATAL, mais bon


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 30-03-2004 à 15:26:43    

the real moins moins a écrit :

http://java.sun.com/j2se/1.4.2/doc [...] rning.html
 
maintenant, c'est bizarre qu'il foute un warning et loggent un FATAL, mais bon


le bon lien serait plutot ca nan ?  http://java.sun.com/j2se/1.4.2/doc [...] Warnings()
Mais c'est assez surprenant qu'ils stacktaracent (;)) une exception au sein du driver jdbc ....


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 30-03-2004 à 15:29:47    

benou a écrit :


le bon lien serait plutot ca nan ?  

bah euh sur la doc de SQLWarning il est écrit ce que c'est et comment les retrouver, et y'a un @see Connection.getWarnings donc bon [:spamafote]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 30-03-2004 à 15:29:47   

Reply

Marsh Posté le 30-03-2004 à 15:35:37    

the real moins moins a écrit :

bah euh sur la doc de SQLWarning il est écrit ce que c'est et comment les retrouver, et y'a un @see Connection.getWarnings donc bon [:spamafote]


ouais, mais en lisant rapidement une première fois j'ai loupé l'info et j'ai cru que tu avais mal compris la question ... je précisais juste un peu les choses ...
 
Qu'est ce que t'en penses du stacktrace en dur dans le driver ? ca te parait pas louche à toi ?


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 30-03-2004 à 15:36:37    

benou a écrit :


ouais, mais en lisant rapidement une première fois j'ai loupé l'info et j'ai cru que tu avais mal compris la question ... je précisais juste un peu les choses ...
 
Qu'est ce que t'en penses du stacktrace en dur dans le driver ? ca te parait pas louche à toi ?

si [:spamafote]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 30-03-2004 à 15:45:39    

Code :
  1. try {
  2. ...
  3. } catch (Exception e) {
  4. e.printStackTrace();
  5. }

J'en vois tous les jours perso ...


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 30-03-2004 à 15:50:03    

ha boooon c'est comme ça qu'on imprime une stacktrace!? on savait pas tien! [:everything4free]
 
j'en vois souvent aussi, mais bcp plus rarement dans du code de production


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 30-03-2004 à 16:25:17    

la version du jdbc est un jdbc pour postgres : pg73jdbc3.jar
version 3 pour postgresql 7.3
 
pour la portion de code suivante :
 

Code :
  1. } catch (SQLException e6) {
  2. // apparemment, il n'y a plus de place
  3. System.out.println(">>>>> avant le printStackTrace()" );
  4. e6.printStackTrace();
  5. System.out.println(">>>>> après le printStackTrace()" );


 
j'ai le retour suivant :
 

Code :
  1. >>>>> avant le printStackTrace()
  2. Backend start-up failed: FATAL:  Sorry, too many clients already
  3.         at org.postgresql.jdbc1.AbstractJdbc1Connection.openConnection(AbstractJdbc1Connection.java:306)
  4.         at org.postgresql.Driver.connect(Driver.java:122)
  5.         at java.sql.DriverManager.getConnection(DriverManager.java:512)
  6.         at java.sql.DriverManager.getConnection(DriverManager.java:171)
  7.         at imadoc.annotcoll.serveur.admin.Connexions.<init>(Connexions.java:49)
  8.         at imadoc.annotcoll.serveur.annot.ServeurConnexionsListener.<init>(ServeurConnexionsListener.java:31)
  9.         at imadoc.annotcoll.serveur.admin.Servelette.doPost(Servelette.java:269)
  10.         at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
  11.         at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
  12.         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
  13.         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
  14.         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
  15.         at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
  16.         at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
  17.         at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
  18.         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
  19.         at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
  20.         at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
  21.         at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
  22.         at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2417)
  23.         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
  24.         at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
  25.         at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
  26.         at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
  27.         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
  28.         at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
  29.         at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
  30.         at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
  31.         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
  32.         at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
  33.         at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
  34.         at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
  35.         at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:193)
  36.         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:781)
  37.         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:549)
  38.         at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:589)
  39.         at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:666)
  40.         at java.lang.Thread.run(Thread.java:534)
  41. >>>>> après le printStackTrace()


 
c'est donc bien ce que je récupère comme exception, n'en déplaise à mes tracteurs [:spamafote]
et j'ai toujours pas trouvé de solution, mis à part un test sur le message, genre
 

Code :
  1. if (e.toString().indexOf(Sorry, too many clients already) != -1){
  2. ...
  3. }


Message édité par Predicator le 30-03-2004 à 16:27:11
Reply

Marsh Posté le 30-03-2004 à 16:27:22    

ben alors tu l'as ton exception :o
c'est quoi le probleme ?

Reply

Marsh Posté le 30-03-2004 à 16:29:38    

haaa putain !
tout le monde avait compris que ct le driver qui avait imprimé l'exception !?!
 
je vois pas bien pourquoi tu voudrais plus recuperer cette exception là qu'une autre. tu peux pas te connecter, tu peux pas te connecter quoi [:spamafote]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 30-03-2004 à 16:33:30    

the real moins moins a écrit :

bcp plus rarement dans du code de production

c'est bien à ce niveau là que j'ai un doute.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 30-03-2004 à 16:35:14    

predicator a écrit :

il ne rentre dans aucun cas de catch, c'est un message d'erreur que je reçois lorsque je fais appel au driver jdbc et qu'il ne peut pas ouvrir de connexion.
si c'était une simple exception, je pense que je saurais comment la récupérer :o


méga-[:kiki]


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 30-03-2004 à 16:44:18    

nraynaud a écrit :

c'est bien à ce niveau là que j'ai un doute.


nan mais logiquement les API sérieuses ne font pas ce genre de chose. Le driver jdbc postgres fait logiquement partie de cette catégorie ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 30-03-2004 à 16:55:12    

Citation :

haaa putain !  
tout le monde avait compris que ct le driver qui avait imprimé l'exception !?!


 
j'avais pas compris que vous aviez compris... je croyais que vous gueuliez sur celui qui pose la question avant d'essayer de comprendre, comme le font beaucoup ici [:spamafote]  
gomen :jap:  
 

the real moins moins a écrit :

je vois pas bien pourquoi tu voudrais plus recuperer cette exception là qu'une autre. tu peux pas te connecter, tu peux pas te connecter quoi [:spamafote]


 
justement, ça peut être sympa de prévenir l'utilisateur qu'il ne peut pas se connecter pour l'instant parce qu'il n'y a plus de place... quand le nombre d'utilisateur est limité à 50 pour des raisons de ressources, et que ce nombre est fréquemment atteint, ça peut être utile non ? :sarcastic:


Message édité par Predicator le 30-03-2004 à 17:02:28
Reply

Marsh Posté le 30-03-2004 à 16:56:23    

benou a écrit :


nan mais logiquement les API sérieuses ne font pas ce genre de chose. Le driver jdbc postgres fait logiquement partie de cette catégorie ...


 
Avec les développements open source, c'est pas toujours sérieux [:spamafote]


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 30-03-2004 à 17:01:19    

kadreg a écrit :


 
Avec les développements open source, c'est pas toujours sérieux [:spamafote]


 
roooh mais ta gueule avec tes trolls pourris :o

Reply

Marsh Posté le 30-03-2004 à 17:01:46    

predicator a écrit :


 
justement, ça peut être sympa de prévenir l'utilisateur qu'il ne peut pas se connecter pour l'instant parce qu'il n'y a plus de place... quand le nombre d'utilisateur est limité à 50 pour des raisons de ressources, et que ce nombre est fréquemment atteint, ça peut être utile non ? :sarcastic:


 
moins moins staÿle [:spamafote]

Reply

Marsh Posté le 30-03-2004 à 17:06:27    

benou a écrit :


nan mais logiquement les API sérieuses ne font pas ce genre de chose. Le driver jdbc postgres fait logiquement partie de cette catégorie ...

comme j'en vois tous les jours ici, je me doute bien que ça doit aussi être courant ailleur. Je suis même convaincu que certains ont ça dans leurs templates de catch().


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 30-03-2004 à 17:16:19    

bon ça tourne au pugilas, et puis on est à 300 bornes du problème initial... ma soluce crade marche, donc c'est pas la peine de vous battre pour rien...

Reply

Marsh Posté le 30-03-2004 à 17:19:02    

DarkLord a écrit :


 
moins moins staÿle [:spamafote]

ben non, tu peux rien faire !
ex.getMessage()
 
Apres, t'es emmerdé parce que le message est en anglais, mais là on en revient a l'eternel probleme de la traduction des messages d'exception, auquel il n'y pas de solution standard


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 30-03-2004 à 17:20:12    

ps: http://java.sun.com/j2se/1.3/docs/ [...] rrorCode()
 
avec le code d'exception spécifique à la db et des fichiers de resources pour les trads des messages qui t'interesse, tu te demerdes[:spamafote]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 30-03-2004 à 17:25:48    

the real moins moins a écrit :

ben non, tu peux rien faire !


 
bah si, j'ai fait :o

Reply

Marsh Posté le 30-03-2004 à 17:39:46    

predicator a écrit :

bon ça tourne au pugilas, et puis on est à 300 bornes du problème initial... ma soluce crade marche, donc c'est pas la peine de vous battre pour rien...


Quelle solution ??
 
Déjà que je comprends pas quel est ton problème ...
 
je cite :  

Citation :

C'est pas une exception, et je ne sais pas comment récupérer un truc comme ça.  


Le fait est que c'est une exception et que tu fais un catch (normal).
 
Donc, c'est quoi ton problème ????


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 30-03-2004 à 17:41:46    

benou a écrit :


Quelle solution ??

if (e.toString().indexOf(Sorry, too many clients already) != -1){

[:kiki]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 30-03-2004 à 17:44:48    

the real moins moins a écrit :

if (e.toString().indexOf(Sorry, too many clients already) != -1){

[:kiki]

la ou ca va être beau, c'est si le message change a la prochaine release  :jap:

Reply

Marsh Posté le 30-03-2004 à 17:45:33    

lorill a écrit :

la ou ca va être beau, c'est si le message change a la prochaine release  :jap:  


 
Ca me rapelle un bug du plugin CVS dans eclipse :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 30-03-2004 à 17:46:45    

kadreg a écrit :


Ca me rapelle un bug du plugin CVS dans eclipse :o


ca me rappelle a moi que c'est mal d'utiliser les toString() des nodes en xml au lieu de getNodeValue() :whistle:

Reply

Marsh Posté le 30-03-2004 à 17:48:51    

lorill a écrit :

la ou ca va être beau, c'est si le message change a la prochaine release  :jap:  


 
c'est la dernière release pour postgresql 7.3 :)  
les autres sont pour postgresql 7.4 et 7.5...
je vais essayer de tester avec le getErrorCode, mais vu que c'est nulle part dans la doc du driver, je suis pas sûr qu'ils s'en servent...
 
enfin, à utilisation d'un driver crade, solution crade non ? [:spamafote]  
et puis j'ai mis une tâche pour pas perdre cet endroit de vu... :bounce:

Reply

Marsh Posté le 30-03-2004 à 17:54:16    

the real moins moins a écrit :

if (e.toString().indexOf(Sorry, too many clients already) != -1){

[:kiki]


j'avais pas vu [:totoz]
 
T'as vérifié que le type excate de l'exception n'est pas une sous exception de SQLException ?


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 30-03-2004 à 17:58:44    

benou a écrit :


j'avais pas vu [:totoz]
 
T'as vérifié que le type excate de l'exception n'est pas une sous exception de SQLException ?  

c'est daill'eurs probablement une PGSQLException


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 15-04-2004 à 15:48:54    

predicator a écrit :

- y'a pas de exit
- je ne confonds rien
 
ce truc apparait dans aucun stacktrace... il ne rentre dans aucun cas de catch, c'est un message d'erreur que je reçois lorsque je fais appel au driver jdbc et qu'il ne peut pas ouvrir de connexion.
 
si c'était une simple exception, je pense que je saurais comment la récupérer :o
 
donc comme c'est pas une exception, je ne sais pas comment récupérer cette erreur... et j'aimerais bien pouvoir le faire quand même
 
si c'est le premier code qui vous gêne, ne vous en occupez pas, il est juste là pour servir de témoin [:spamafote]  
d'ailleurs je vais l'enlever, hop.


 
Essai de catcher un Throwable au lieu de Exception,
c'est un cran au-dessus dans la hiérérchie des classes.
 
En général il faut les laisser passer car c'est des erreurs graves.

Reply

Marsh Posté le 21-04-2004 à 12:28:44    

Code :
  1. } catch (SQLException e6) {
  2. System.out.println("Alors là tu vois t'as un problème avec SQL, le problème c'est un truc genre " + e6.getMessage() + " note que le problème il est peut-être en anglais mais que c'est pas grave parce que la majorité des gens ils apprennent l'anglais à l'école. Si t'as un problème en anglais fais-le traduire par tes parents, ils seront content de pouvoir t'aider." );
  3. }


 
= > Pas de problème de maintenance, et respect total de l'utilisateur.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed