Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
650 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2  3
Auteur Sujet :

[J2EE] Le NPE est en fait une SQLException (pool exhausted)

n°1153323
benou
Posté le 19-07-2005 à 09:44:41  profilanswer
 

Reprise du message précédent :

Iria_hime a écrit :

ah daccord :jap:
 
par contre je suis obligée de la mettre en static parce que certaines de mes méthodes le sont et donc j'ai pas le choix, m'enfin c pas trop grave je pense.


sureprenant d'avoir des méthodes statiques sur une classe récupérée via le design pattern singleton ...
 

Iria_hime a écrit :


par contre j'ai pas d'init dans ma servlet parce que je n'initialise pas mes classes métiers comme ça mais selon les paramètres récupérés par mes doGet et doPost.


ca veut dire que tu les réinitialises à chaque requête ... c'est pas ce qu'il y a de plus optimal :/

mood
Publicité
Posté le 19-07-2005 à 09:44:41  profilanswer
 

n°1153398
Iria_hime
Pseudo ACNH : Iria
Posté le 19-07-2005 à 10:40:28  profilanswer
 

benou a écrit :

sureprenant d'avoir des méthodes statiques sur une classe récupérée via le design pattern singleton ...


bah j'ai besoin de méthodes statiques pour mes getInstance et getAllInstances.
Le premier me permet de récupérer une instance de la classe en ne lui passant que le numéro de l'objet. Il va rechercher dans la bdd les infos de cet objet grace à ce numéro/id.
le deuxième me permet de récupérer toutes les instances d'un objet et je ne peux clairement pas le faire sans méthode statique.
 

benou a écrit :

ca veut dire que tu les réinitialises à chaque requête ... c'est pas ce qu'il y a de plus optimal :/


bah en fait je ne vois pas comment faire autrement. J'ai pas mal de classes métiers et je n'ai pas toujours besoin de toutes. selon l'url passé et les arguments, je vais ensuite construire mes objets.
mais a vrai dire je ne connais pas bien la méthode init et comment on peut l'utiliser. peux tu m'éclairer sur ce point ?

n°1153425
benou
Posté le 19-07-2005 à 11:00:39  profilanswer
 

Iria_hime a écrit :

je ne peux clairement pas le faire sans méthode statique.


je vois vraiment aucune raison qui pourrait t'empecher de passer par des méthodes non-static ...
 
C'est qui qui t'y obliges d'après toi ?
 

Iria_hime a écrit :


bah en fait je ne vois pas comment faire autrement. J'ai pas mal de classes métiers et je n'ai pas toujours besoin de toutes. selon l'url passé et les arguments, je vais ensuite construire mes objets.
mais a vrai dire je ne connais pas bien la méthode init et comment on peut l'utiliser. peux tu m'éclairer sur ce point ?


la méthode init est là pour te permettre d'initialiser ou de récupérer des objets dont tu auras besoin par la suite. Ca te permet de le faire une fois pour toute plutot que de faire la même opération systématiquement. Par exemple, récupérer ton DataSource. A quoi ca te sert d'aller le chercher à chaque requête ?? Tu récupères toujours le même ...
 
bien sûr, pour tout ce qui dépend de paramètres passés dans la requête, tu ne peux pas le faire dans la méthod init() ...


---------------
ma vie, mon oeuvre - HomePlayer
n°1153428
sircam
I Like Trains
Posté le 19-07-2005 à 11:04:57  profilanswer
 

benou a écrit :

sureprenant d'avoir des méthodes statiques sur une classe récupérée via le design pattern singleton ...


+1, et commencer à tout passer en static parce que ça coince ailleurs, ça sent le ranse.
 

benou a écrit :

ca veut dire que tu les réinitialises à chaque requête ... c'est pas ce qu'il y a de plus optimal :/


+2  [:airforceone]  


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1153442
Iria_hime
Pseudo ACNH : Iria
Posté le 19-07-2005 à 11:13:00  profilanswer
 

mais pour mon getAllInstances. je vais tout de même pas récupérer toutes les instances d'une classe à partir d'une instance particulière ? ça me semble pas logique là :??:

n°1153455
Profil sup​primé
Posté le 19-07-2005 à 11:18:59  answer
 

sircam a écrit :

et commencer à tout passer en static parce que ça coince ailleurs, ça sent le ranse.


 
Oops, c'est moi ça :D Et le passage de private à public aussi, ca simplifie les choses parfois :D

n°1153477
Iria_hime
Pseudo ACNH : Iria
Posté le 19-07-2005 à 11:32:04  profilanswer
 

moi j'ai des méthodes statiques que je peux enlever chui d'accord mais pas pour les 2 méthodes dont j'ai parlé ca me semble pas logique.
sauf peut être mon getInstance, il suffirait que je rende le constructeur public.

n°1153500
benou
Posté le 19-07-2005 à 11:43:55  profilanswer
 

Iria_hime a écrit :

moi j'ai des méthodes statiques que je peux enlever chui d'accord mais pas pour les 2 méthodes dont j'ai parlé ca me semble pas logique.
sauf peut être mon getInstance, il suffirait que je rende le constructeur public.


 
si ton getInstance() c'est juste pour le design pattern singleton, c'est normal qu'il soit static.
Par contre si il fait des requêtes en base ou se genre de chose, là c'est plus normal ...
 
 
et d'après le code que tu as donné, c'est ce que fait ton getAllInstances() n'a pas à être fait dans une méthode static (d'ailleur dans le code que tu as filé, elle n'est pas static)


---------------
ma vie, mon oeuvre - HomePlayer
n°1153504
benou
Posté le 19-07-2005 à 11:45:25  profilanswer
 

Iria_hime a écrit :

mais pour mon getAllInstances. je vais tout de même pas récupérer toutes les instances d'une classe à partir d'une instance particulière ? ça me semble pas logique là :??:


qu'est ce que tu appelles instance ? instance de quoi ?
 
Tu pourrait préciser quels sont les différents objets dont on parle et quels sont leur fonction ?
parce que ca commence à s'embrouiller un  peu là :)


---------------
ma vie, mon oeuvre - HomePlayer
n°1153523
Iria_hime
Pseudo ACNH : Iria
Posté le 19-07-2005 à 11:58:53  profilanswer
 

Ok alors par exmple pour ma classe métier Company. Elle permet de créer une entreprise et récupère pour cela les information de la bdd qui référencent les entreprises.
 
voici mes méthodes getInstances et getAllInstances :
 

Code :
  1. //renvoie une instance de l'entreprise pour le companyNum passé en paramètre
  2. public static Company getInstance(final int companyNum)
  3. throws SQLException {
  4.     PreparedStatement stmt = _queryBroker.getPreparedStatement(
  5. "select * from company where companyNum = ?" );
  6.     stmt.setInt(1, companyNum);
  7.     ResultSet rs = stmt.executeQuery();
  8.     try {
  9. if (rs.next()) {
  10.     return new Company(rs.getInt("companyNum" ),
  11.  rs.getString("corporateName" ), rs.getString("companyName" ),
  12.  rs.getString("telephone" ), rs.getString("observations" ));
  13. } else
  14.     return null;
  15. } finally {
  16.     if (rs != null)
  17.  rs.close();
  18. }
  19. }
  20. //renvoie une liste avec toutes les instances de la table company
  21. public static List getAllInstances()
  22. throws SQLException {
  23.     List list = new ArrayList();
  24.     ResultSet rs = null;
  25.     try {
  26. rs = _queryBroker.executeQuery(
  27.     "select * from company" );
  28. while (rs.next())
  29.     list.add(new Company(rs.getInt("companyNum" ),
  30.  rs.getString("corporateName" ), rs.getString("companyName" ),
  31.  rs.getString("telephone" ), rs.getString("observations" )));
  32. } finally {
  33.     if (rs != null)
  34.  rs.close();
  35. }
  36. return list;
  37. }


 
est ce que c'est plus clair ?

mood
Publicité
Posté le 19-07-2005 à 11:58:53  profilanswer
 

n°1153721
Iria_hime
Pseudo ACNH : Iria
Posté le 19-07-2005 à 14:27:52  profilanswer
 

bon j'ai clairement un problème avec mes conneries de static pas static :fou:
 
de ce fait j'arrive pas à utiliser correctement la variable de classe QueryBroker :/
 
est-ce que mes méthodes getInstance et getAllInstances ne doivent vraiment pas être statiques ? ou alors si elles doivent l'être mais qu'elles ne doivent pas faire de requêtes je fais comment ? :??:

n°1153748
benou
Posté le 19-07-2005 à 14:55:53  profilanswer
 

disons que là c'est de la programmation procédurale que tu fais, pas de la programmation objet ...
 
Rien de très gênant en soit, si ce n'est que c'est pas très beau et que tu perds en évolutivité ...  
 
Ca risque de te prendre pas mal de temps et d'effort si tu veux tout refaire en object.
 
 
En gros, à la place d'avoir des méthodes static, tu devrais avoir un autre objet qui te permet de récupérer les instances d'objets Company. Cet objet devrait posséder une instance de QueryBroker pour pouvoir accéder à la base de données. Et QuerryBroker devra posséder un DataSource qu'il récupère dans le Context.
 
par cette méthode, tu évites d'avoir à mettre des static partout.


---------------
ma vie, mon oeuvre - HomePlayer
n°1153751
Iria_hime
Pseudo ACNH : Iria
Posté le 19-07-2005 à 14:59:29  profilanswer
 

ouais ça va me demander beaucoup de boulot là :/
et puis c'est toute ma logique de conception qui en prend un coup.
 
m'enfin le pire c'est que c'est ce que j'ai appris en cours et  j'avais un bon prof... je lui demanderai son avis si ça se trouve lui aussi il va s'arracher les cheveux :p
 
edit : alors du coup je fais comment avec ma variable QueryBroker qui me zut grave [:iznogoud_23] ?


Message édité par Iria_hime le 19-07-2005 à 15:01:16
n°1153754
benou
Posté le 19-07-2005 à 15:02:58  profilanswer
 

en même temps, c'est un peu extremiste de vouloir virer tous les static ... ca peut très bien marcher avec, mais sur la longueur tu t'aperçois que c'est plus gênant qu'autre chose, sauf pour quelques méthodes utilitaires qui ne nécessite pas de contexte d'execution.
 
Mais là, toi dans ton cas tu fais des accès à des base de données et tout ... du coup, tu es obligé de construire l'instance qui te permet d'accéder à la base de donnée à chaque fois, ou bien de la déclarer static elle aussi, ce qui est assez crade ...


---------------
ma vie, mon oeuvre - HomePlayer
n°1153762
Iria_hime
Pseudo ACNH : Iria
Posté le 19-07-2005 à 15:13:12  profilanswer
 

mais comment je devrais faire simplement alors ? :cry:

n°1153804
benou
Posté le 19-07-2005 à 16:01:37  profilanswer
 

QueryBrocker
 -> constructeur : va chercher le DataSource et le stocke en variable de classe
 -> executeQuery(query) : execute la requête et retourne un resultset
 
 
CompanyManager
 -> constructeur(QueryBrocker) : stocke le QueryBrocker en variable de classe
 ->getInstance(companyNum) : utilise le QueryBrocker pour retrouver la compagnie en base
 ->getAllInstances() : utilise le QueryBrocker pour retrouver toutes les compagnies en base
 
etc.
 
remarque : si les objet Compagnie peuvent se mettre à jour tout seul, il faut que tu leur passes l'objet QueryBrocker à la construction
 
 
avec une architecture de ce style, tu n'as plus de méthode static ...


---------------
ma vie, mon oeuvre - HomePlayer
n°1153861
Iria_hime
Pseudo ACNH : Iria
Posté le 19-07-2005 à 16:39:54  profilanswer
 

je vais voir pour faire ça :jap:
 
sinon a priori je gère mieux mes exceptions puisque j'ai une SQLException qui a été catché par une servlet. le problème c'est que je me tape une java.lang.IllegalStateException sur cette ligne : "response.sendError(500, "BDD error during add options of a CustomerProduct" );" (ligne qui est dans un catch de mon doPost).
 
c'est normal ça ? parce que c'est une ligne que m'a donné quelqu'un ici :/

n°1153883
benou
Posté le 19-07-2005 à 16:52:39  profilanswer
 

Iria_hime a écrit :

c'est normal ça ? parce que c'est une ligne que m'a donné quelqu'un ici :/


ouais c'est moi.
 
le response.sendError() ne peut être utilisé que si tu n'as pas encore commencé à érire. Et après que tu ais fait le sendError, tu n'as plus le droit d'écrire non plus.
 
Tu aurais pas oublié le "return;" juste après le sendError() ? (erreur classique)


---------------
ma vie, mon oeuvre - HomePlayer
n°1153900
Iria_hime
Pseudo ACNH : Iria
Posté le 19-07-2005 à 16:59:12  profilanswer
 

benou a écrit :

ouais c'est moi.
 
le response.sendError() ne peut être utilisé que si tu n'as pas encore commencé à érire. Et après que tu ais fait le sendError, tu n'as plus le droit d'écrire non plus.
 
Tu aurais pas oublié le "return;" juste après le sendError() ? (erreur classique)


ah ya un return après le sendError ? :whistle:  
 
j'avais fait comme ça :

Code :
  1. try {
  2. // instructions
  3. } catch (SQLException ex) {
  4. System.err.println("Error in ProductController : Impossible to add options of a CustomerProduct." );
  5. ex.printStackTrace(System.err);
  6. response.sendError(500, "BDD error during add options of a CustomerProduct" );
  7. }

n°1153913
benou
Posté le 19-07-2005 à 17:06:00  profilanswer
 

le "return;" c'est une façon simple pour arrêter le traitement à ce moment là.
 
Là j'imagine que à la suite de ton catch tu fais le traitement "normal" => tu écris quelque chose ou tu fais dispatch vers une jsp ...


---------------
ma vie, mon oeuvre - HomePlayer
n°1153931
Iria_hime
Pseudo ACNH : Iria
Posté le 19-07-2005 à 17:11:01  profilanswer
 

dans ce cas je dispatch vers une jsp, mais des fois j'ai aussi mis le dispatch dans le try.

n°1153952
benou
Posté le 19-07-2005 à 17:20:44  profilanswer
 

Iria_hime a écrit :

dans ce cas je dispatch vers une jsp, mais des fois j'ai aussi mis le dispatch dans le try.


t'as deux solutions : soit tu mets un return, soit tu t'assures de pas faire de dispatch après le sendError.
 
Mais peut être que ce que tu préferais faire c'est un dispatch vers une page d'erreur plutot qu'un sendError() ... enfin à toi de voir ...


---------------
ma vie, mon oeuvre - HomePlayer
n°1154014
Iria_hime
Pseudo ACNH : Iria
Posté le 19-07-2005 à 18:02:24  profilanswer
 

je ferai une page d'erreur je pense, mais pas tout de suite, c'est pas ma priorité :)
 
 :bounce: bon sinon j'ai trouvé la source de mon NullPointerException qui pétait de temps en temps !
Alors voilà ce que j'ai d'affiché :

Code :
  1. Error in ProductController : Impossible to get all instances of Options or Platforms.
  2. org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool exhausted


Ok alors maintenant je vais devoir trouver pourquoi j'ai cette erreur qui pète... peut être un problème de paramétrage...
 
en tout cas chui contente d'avoir mon explication moua [:boidleau]


Message édité par Iria_hime le 19-07-2005 à 18:02:44
n°1154226
souk
Tourist
Posté le 20-07-2005 à 01:38:14  profilanswer
 

c'est pas plutot du au fait que tu ne fermes pas toujours tes connections ? genre apres une exception, le close passe a la trappe ? => voir la clause finally apres un try catch pour liberer une connection
 
edit: par la j'insinue pas que tu ne le fais pas [:joce] je suggere juste une cause possible [:joce]


Message édité par souk le 20-07-2005 à 01:39:10
n°1154260
Iria_hime
Pseudo ACNH : Iria
Posté le 20-07-2005 à 08:31:14  profilanswer
 

hier j'avais regardé par là. j'avais bien toujours une clause finally pour fermer mon resultset mais... je l'avais pas fait pour closer mes preparedStatement.
Une fois l'oubli corrigé j'ai retesté mais j'avais tjs le même problème :(
 
bon je regarderai tout à l'heure les différentes causes possibles et tout et tout.

n°1154263
souk
Tourist
Posté le 20-07-2005 à 08:32:33  profilanswer
 

Iria_hime a écrit :

hier j'avais regardé par là. j'avais bien toujours une clause finally pour fermer mon resultset mais... je l'avais pas fait pour closer mes preparedStatement.
Une fois l'oubli corrigé j'ai retesté mais j'avais tjs le même problème :(
 
bon je regarderai tout à l'heure les différentes causes possibles et tout et tout.


pour fermer le resultset, mais l'objet QueryBroker ferme t'il les connections ?

n°1154359
Iria_hime
Pseudo ACNH : Iria
Posté le 20-07-2005 à 09:55:27  profilanswer
 

justement chui en train de regarder ça, à mon avis ça vient de là c'est clair !

n°1154540
Iria_hime
Pseudo ACNH : Iria
Posté le 20-07-2005 à 11:29:48  profilanswer
 

bon j'ai toujours mon problème. je sais que ça vient du QueryBroker alors je l'ai un peu modifié ainsi que mes classes et servlet. J'aimerai avoir votre avis.
 

Code :
  1. public class QueryBroker {
  2. private static QueryBroker _instance = null;
  3. private DataSource _ds = null;
  4. private Connection _con;
  5. private Statement _stmt;
  6. private ResultSet _rs;
  7. public static QueryBroker getInstance() {
  8.  if (null == _instance)
  9.   _instance = new QueryBroker();
  10.  return _instance;
  11. }
  12. /*
  13.  * hidden constructor
  14.  */
  15. private QueryBroker() {
  16.  try {
  17.   Context initContext = new InitialContext();
  18.   Context envContext = (Context) initContext.lookup("java:/comp/env" );
  19.   _ds = (DataSource) envContext.lookup("jdbc/datas" );
  20.  } catch (NamingException ex) {
  21.   System.err.println("Error in QueryBroker : Impossible to initContext." );
  22.   ex.printStackTrace(System.err);
  23.  }
  24. }
  25. public void close()
  26. throws SQLException {
  27.  if (_rs != null)
  28.   _rs.close();
  29.  if (_stmt != null)
  30.   _stmt.close();
  31.  if (_con != null)
  32.   _con.close();
  33. }
  34. public ResultSet executeQuery(String query)
  35. throws SQLException {
  36.  _con = _ds.getConnection();
  37.  _stmt = _con.createStatement();
  38.  _rs = _stmt.executeQuery(query);
  39.  return _rs;
  40. }
  41. public PreparedStatement getPreparedStatement(final String query)
  42. throws SQLException {
  43.  _con = _ds.getConnection();
  44.  _stmt = _con.prepareStatement(query);
  45.  return (PreparedStatement) _stmt;
  46. }
  47. }


Alors je sais mon constructeur à un catch qu'il ne devrai pas, mais je pense régler ça après que mon truc marche ;)
j'ai fait une nouvelle méthode close() pour fermer ma connection, mon statement et mon resultset.
 
ex pour ma servlet HomeController

Code :
  1. public final class HomeController
  2. extends BetterHttpServlet
  3. {
  4. private QueryBroker _queryBroker;
  5. public void init()
  6. throws ServletException {
  7.  super.init();
  8.  _queryBroker = QueryBroker.getInstance();
  9. }
  10. public void destroy() {
  11.  super.destroy();
  12.  try {
  13.   _queryBroker.close();
  14.  } catch (SQLException e) {
  15.   System.err.println("Error in AdminController : Impossible to get all users rights." );
  16.   e.printStackTrace(System.err);
  17.  }
  18. }
  19. protected void doGet(final HttpServletRequest request,
  20.  final HttpServletResponse response)
  21. throws ServletException, IOException {
  22.  try {
  23.   request.setAttribute("companies", Company.getAllInstances(_queryBroker));
  24.   forward(request, response, "/WEB-INF/pages/home.jsp" );
  25.  } catch (SQLException ex) {
  26.   System.err.println("Error in HomeController : Impossible to get all instances of Company." );
  27.   ex.printStackTrace(System.err);
  28.   response.sendError(500, "BDD error during method to get all instances of Company" );
  29.  }
  30. }
  31. }

Ici vous pouvez voir que j'ai mon queryBroker en variable privée. Je passe ensuite cette variable à mes méthodes des différentes classes métiers.
Je pensais que ce serait bon en initialisant mon broker au moment du init et en le closant au moment du destroy. Apparemment c pas ça :/


Message édité par Iria_hime le 20-07-2005 à 11:31:37
n°1154693
jalios828
Posté le 20-07-2005 à 13:56:49  profilanswer
 

Remarque un peu hors sujet mais interessante quand meme : Ca serait bien de logger avec log4j ou consort : après tu as une meilleure vision de ce qui se passe...
 
Que tu fasses de l'objet, du SQL, du script shell, il faut logger proprement avec des niveaux de logs (INFO, WARN, DEBUG). Si tu avais tout bien loggué toutes les exceptions, tu aurais peut etre vu le probleme de pool de connexion depuis belle lurette....

n°1154753
Iria_hime
Pseudo ACNH : Iria
Posté le 20-07-2005 à 14:25:25  profilanswer
 

bah chui pas trop au fait de ces choses alors je faisais au pifomètre [:cupra]


Message édité par Iria_hime le 20-07-2005 à 14:25:34
n°1154846
Iria_hime
Pseudo ACNH : Iria
Posté le 20-07-2005 à 15:20:27  profilanswer
 

j'implore un gros OSKOOOOOOOOOOR :cry:
 
 [:sisicaivrai]  [:sisicaivrai]  [:sisicaivrai]  
 
je ferme bien mes connexions non ? pourquoi alors j'ai cette satanée erreur ? Moi qui pensais que j'allais résoudre ça facilement chui larguée :'(

n°1154858
jalios828
Posté le 20-07-2005 à 15:28:08  profilanswer
 

Iria_hime a écrit :

j'implore un gros OSKOOOOOOOOOOR :cry:
 
 [:sisicaivrai]  [:sisicaivrai]  [:sisicaivrai]  
 
je ferme bien mes connexions non ? pourquoi alors j'ai cette satanée erreur ? Moi qui pensais que j'allais résoudre ça facilement chui larguée :'(


 
 
dsl je dois etre fatigué mais ou est ce que tu appelles la méthode close de ton QueryBroker hormis dans le destroy de ta servlet ?

n°1154866
Iria_hime
Pseudo ACNH : Iria
Posté le 20-07-2005 à 15:33:18  profilanswer
 

alors je l'appelait que dans le destroy. je m'étais dit que ct suffisant.
depuis j'ai viré l'init et le destroy et bloc try catch existant, j'initialise en premier le broker et j'ai fait un finally où j'appele le close.
 
ex :

Citation :

try {
    _queryBroker = QueryBroker.getInstance();
    sysTable.addAll(UserRight.getAllInstances(_queryBroker));
    if (!sysTable.isEmpty()) {
 request.setAttribute("tableRights", sysTable);
    } else {
 request.setAttribute("errorMessage", "Il n'y a pas d'utilisateurs enregistré." );
    }
    forward(request, response, "/WEB-INF/pages/adminRights.jsp" );
} catch (SQLException e) {
    System.err.println("Error in AdminController : Impossible to get all users rights." );
    e.printStackTrace(System.err);
    response.sendError(500, "BDD error during method to get all users rights" );
} finally {
    try {
 _queryBroker.close();
    } catch (SQLException e) {
 System.err.println("Error in AdminController : Impossible to destroyServlet." );
 e.printStackTrace(System.err);
    }
}


Message édité par Iria_hime le 20-07-2005 à 15:33:39
n°1154901
alien_nan
Posté le 20-07-2005 à 15:48:54  profilanswer
 

Iria_hime a écrit :

alors je l'appelait que dans le destroy. je m'étais dit que ct suffisant.
depuis j'ai viré l'init et le destroy et bloc try catch existant, j'initialise en premier le broker et j'ai fait un finally où j'appele le close.
...


 
 
J'ai peut etre une question à l'ouest, mais es tu sur que le close sur le _queryBroker libère bien ta connection ?


Message édité par alien_nan le 20-07-2005 à 15:49:14
n°1154917
Iria_hime
Pseudo ACNH : Iria
Posté le 20-07-2005 à 15:56:26  profilanswer
 

j'ai mis plus haut le contenu de mon close()
 
sinon j'veux bien savoir comment on libère cette *#$µ&!#*$ de connexion ! :fou:

n°1154958
alien_nan
Posté le 20-07-2005 à 16:10:56  profilanswer
 

Iria_hime a écrit :

j'ai mis plus haut le contenu de mon close()
 
sinon j'veux bien savoir comment on libère cette *#$µ&!#*$ de connexion ! :fou:


 
Qd tu fais un forward, le destroy de la servlet se fait a tous les coups ? (manque de culture inside)
J'ai mis en place des Datasources comme toi, et je n'ai jms rencontré ce genre d'erreur...
 
La différence est que j'ai mon singleton qui contient une datasource, et j'ai une méthode getConnection (qui fait le getConnection sur la datasource), et un freeConnection(laconnection)
 
Donc ds mes objets, je créé les objets resultset et prepareStatment, et les closes ds des finally (avec la methode de liberation de la connection)
 
ps: Par contre, je me suis rendu compte que j'ai mis mon objet Connection en statique, pas bien.


Message édité par alien_nan le 20-07-2005 à 16:14:50
n°1154972
Iria_hime
Pseudo ACNH : Iria
Posté le 20-07-2005 à 16:14:43  profilanswer
 

donc en gros tu vois pas où j'ai boulaytisé ? [:alph-one]

n°1154978
alien_nan
Posté le 20-07-2005 à 16:17:01  profilanswer
 

Iria_hime a écrit :

donc en gros tu vois pas où j'ai boulaytisé ? [:alph-one]


mets un system.err... avt et apres ton _queryBroker.close pour etre sur que tu y passes bien ?

n°1155005
Iria_hime
Pseudo ACNH : Iria
Posté le 20-07-2005 à 16:30:04  profilanswer
 

Bah oué il y passe bien :cry:
 
bon est-ce que ça pourrait venir du paramétrage de ma base ? :/

n°1155024
jalios828
Posté le 20-07-2005 à 16:34:41  profilanswer
 

Iria_hime a écrit :

Bah oué il y passe bien :cry:
 
bon est-ce que ça pourrait venir du paramétrage de ma base ? :/


ou du paramètrage de la datasource....

n°1155205
souk
Tourist
Posté le 20-07-2005 à 18:31:11  profilanswer
 

question conne hein, mais ton query broker c'est un singleton qui utilise une connection donnée, deux clients attaquent ton site web, les deux threads utilisent ton query broker, le premier close ta connection, qu'arrive t'il au second ? [:itm]
 
c'est moi qui a mal suivi ou y a une grosse coucouille là ?[:dawa] ce serait mieux si c'était pas un singleton et que tu avais bien une connection par thread nan ? paske la bon...ton pool de connection il a la vie un peu tranquile j'ai l'impression :D
 
(quelque chose me dit que je viens de dire une connerie et que plusieurs post m'ont échappé nan ? [:joce] )

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3

Aller à :
Ajouter une réponse
 

Sujets relatifs
Licenece J2EE JBossLicence application J2EE
[Framework J2EE] Gestion d'utilisateurs[Java] Obtenir la liste des sessions d'un serveur J2EE
[EJB][WEBLOGIC][JBuilder]Modifier ma connection au poolSecurite J2EE
Lien entre J2EE et Strutsthread pool
augmenter la large pool sous oracle 9i 
Plus de sujets relatifs à : [J2EE] Le NPE est en fait une SQLException (pool exhausted)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR