Driver JDBC

Forum destiné aux questions sur le développement : Formules, LotusScript, Java ...

Driver JDBC

Messagepar seroa » 19 Avr 2011 à 07:22

Bonjour à tous,

J'ai un soucis avec le chargement du driver JDBC.

J'ai un agent java qui effectue une requete SQL puis me renvoi du code XML avec un PrintWriter.

L'agent fonctionne bien, mais lors du 20ème lancement, il plante. Peut importe le temps entre les lancements, il plante au 20ème.

Après plusieurs tests, je me suis rendu compte que cela venait de la ligne :

Code : Tout sélectionner
Class.forName(driver).newInstance();
qui appel le driver jdbc.

Avez-vous rencontré ce problème ? Comment effectuez vous l'appel du driver jdbc ?

Merci.
Dernière édition par seroa le 20 Avr 2011 à 08:30, édité 1 fois.
seroa
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 304
Inscrit(e) le : 08 Nov 2007 à 08:36
Localisation : Mâcon

Messagepar abertisch » 19 Avr 2011 à 07:37

Salut,

A la fin de chaque appel, tu fermes bien ta connexion JDBC ?
"Lotus, il n'y a qu'en rouleaux que ça fait pas mal au cul"
abertisch
Roi des posts
Roi des posts
 
Message(s) : 763
Inscrit(e) le : 25 Oct 2006 à 13:51
Localisation : Suisse

Messagepar seroa » 19 Avr 2011 à 07:45

Salut,

Oui je fais bien le .close de ma connexion dans un finally.

J'ai fais le test avec seulement Class.forName(driver).newInstance(); dans le run(), et bien cela plante au bout de 20 lancements.

On dirait qu'il appel le driver et le garde en mémoire sans jamais la vider.
seroa
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 304
Inscrit(e) le : 08 Nov 2007 à 08:36
Localisation : Mâcon

Messagepar abertisch » 19 Avr 2011 à 11:52

seroa a écrit:Salut,

Oui je fais bien le .close de ma connexion dans un finally.

J'ai fais le test avec seulement Class.forName(driver).newInstance(); dans le run(), et bien cela plante au bout de 20 lancements.

On dirait qu'il appel le driver et le garde en mémoire sans jamais la vider.


Peux-tu tester l’existence de la connexion avant de faire un newinstance ?
"Lotus, il n'y a qu'en rouleaux que ça fait pas mal au cul"
abertisch
Roi des posts
Roi des posts
 
Message(s) : 763
Inscrit(e) le : 25 Oct 2006 à 13:51
Localisation : Suisse

Messagepar seroa » 19 Avr 2011 à 16:36

En fait, je ne suis pas obligé de faire un newInstance(), un simple Class.forName(driver) suffit.

Il est pas possible de tester si le driver a déjà été appelé ou pas, en tout cas je ne voit pas comment.

Voila ma classe Test de mon agent test. Appelé sur un lien d'un masque avec

Code : Tout sélectionner
@Command([ToolsRunMacro]; "test")


Classe Test :

Code : Tout sélectionner
public class Test extends AbstractDominoAgent {

   
   public Test(final Session session) {
      super(session);
   }

   public void run() throws NotesException {
      try{
         
      
         Class.forName("com.mysql.jdbc.Driver");
      
                           
      } catch (Exception e){
         System.out.println("Error : "+e);
      }
      
   }
}


Au bout de 20 clic sur mon lien, j'ai le message d'erreur suivant jusqu'au redémarrage du serveur.

HTTP JVM: JVMDUMP006I Processing dump event "systhrow", detail "java/lang/OutOfMemoryError" - please wait.
HTTP JVM: JVMDUMP032I JVM requested Snap dump using '/local/notesdata/Snap.20110418.134808.2705.0001.trc' in response to an event
HTTP JVM: JVMDUMP010I Snap dump written to /local/notesdata/Snap.20110418.134808.2705.0001.trc
HTTP JVM: JVMDUMP032I JVM requested Heap dump using '/local/notesdata/heapdump.20110418.134808.2705.0002.phd' in response to an event
HTTP JVM: JVMDUMP010I Heap dump written to /local/notesdata/heapdump.20110418.134808.2705.0002.phd
HTTP JVM: JVMDUMP032I JVM requested Java dump using '/local/notesdata/javacore.20110418.134808.2705.0003.txt' in response to an event
HTTP JVM: JVMDUMP010I Java dump written to /local/notesdata/javacore.20110418.134808.2705.0003.txt
HTTP JVM: JVMDUMP013I Processed dump event "systhrow", detail "java/lang/OutOfMemoryError".
HTTP JVM: Exception in thread "Thread-9"
HTTP JVM: java.lang.OutOfMemoryError
seroa
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 304
Inscrit(e) le : 08 Nov 2007 à 08:36
Localisation : Mâcon

Messagepar Smicky » 20 Avr 2011 à 06:57

Je ten conseille fortement de placer les drivers JDBC dans ton réperoire jvm/lib/ext sur ton serveur Domino (nécéssite un redemarrage du serveur)

Ainsi ils seront chargés par le classloader de Domino au démarrage du serveur et ton appli sera plus stable. En effet, ce genre de jar pose souvent pb si ils sont "attachés" dans des agents qui se chargent et déchargent a chaque execution

Pour info, quelle est ta version de Domino ?
Smicky
Posteur habitué
Posteur habitué
 
Message(s) : 232
Inscrit(e) le : 09 Déc 2006 à 15:27
Localisation : Paris

Messagepar seroa » 20 Avr 2011 à 08:29

Merci !

C'était bien ça ! J'ai mis mon driver dans jvm/lib/ext et plus de problème.

Je suis en v 8.5.2 sur linux.

Merci encore.
seroa
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 304
Inscrit(e) le : 08 Nov 2007 à 08:36
Localisation : Mâcon

Messagepar Michael DELIQUE » 20 Avr 2011 à 08:36

Senseï Smicky un petit tips sur le sujet ?
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar Michael DELIQUE » 20 Avr 2011 à 09:59

Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy


Retour vers Développement

cron