Bonjour à tous !
Je développe une application java batch, qui doit entre autre appeler un autre programme, sql loader, pour remplir une table à l'aide d'un fichier de données en entré.
Voici mon code :
Quand je lance ce programme, avec un fichier de donné relativement petit, c'est à dire à peu près 100 lignes, il n'y a pas de problème, la table se charge.
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 Runtime runtime = Runtime.getRuntime(); String[] exec = new String[] { "sqlldr.exe", "userid=" + Main.user + "@" + Main.baseInstance + "/" + Main.motDePasse, "control=../conf/control.txt", "log=../log/sqlloaderLog.log", "bad=../log/sqlloaderBad.log", "discard=../log/sqlloaderDiscard.log", "data=" + nomFichierCasia }; try { Process process = runtime.exec(exec); process.waitFor(); logger.log(Level.INFO, "un certain nombre a été chargé ... "); System.out.println("un certain nombre a été chargé ... "); } catch (IOException e) { } catch (InterruptedException e) { }
Mais lorsque le fichier de données est plus conséquent, à peu près 800 lignes, le programme se bloque à la ligne process.waitFor(); et je suis obligé d'arréter le processus.
Par ailleurs, si je lance sql loader seul, avec le même gros fichier de données, il n'y a pas de problème, la table se charge en quelques secondes.
Ce qui est bizarre, c'est que quand le programme se bloque, je vais voir dans la table qui doit se charger, et il y a effectivement 318 lignes qui ont déjà été chargées. Ce nombre est invariable avec le temps.
Lorsque j'arrête le processus JAVA, ce nombre s'élève instantanément à 754, c'est à dire qu'en fait toutes les données sont chargées à ce moment là.
J'espère que je me suis bien fait comprendre, je crois que j'ai oublié de faire quelque chose vers la ligne process.waitFor();
Donc le problème c'est que le programme se bloque, et ne peut se terminer correctement.
Je vous remercie de vos conseils, et vous souhaite une bonne journée.
Partager