Page 1 sur 1

Driver JDBC

MessagePublié: 19 Avr 2011 à 07:22
par seroa
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.

MessagePublié: 19 Avr 2011 à 07:37
par abertisch
Salut,

A la fin de chaque appel, tu fermes bien ta connexion JDBC ?

MessagePublié: 19 Avr 2011 à 07:45
par seroa
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.

MessagePublié: 19 Avr 2011 à 11:52
par abertisch
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 ?

MessagePublié: 19 Avr 2011 à 16:36
par seroa
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

MessagePublié: 20 Avr 2011 à 06:57
par Smicky
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 ?

MessagePublié: 20 Avr 2011 à 08:29
par seroa
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.

MessagePublié: 20 Avr 2011 à 08:36
par Michael DELIQUE
Senseï Smicky un petit tips sur le sujet ?

MessagePublié: 20 Avr 2011 à 09:59
par Michael DELIQUE