1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
Class finance {
// classe principale qui gère les prod et conso
// contient l'objet queueRA accédée par les 2 types de threads
protected static ConcurrentLinkedQueue<ResourceAssignment> queueRA = null;
private ThreadPoolExecutor threadPoolReader = null;
public Finance(...){
queueRA = new ConcurrentLinkedQueue<ResourceAssignment>();
threadPoolReader = new ThreadPoolExecutor(nbThreads,maxSize,timeOut,unit,new LinkedBlockingQueue<Runnable>());
}
protected int traitement() {
...
while(itCa.hasNext()){ // une boucle sur des objets de type "Projet"
// se rapporte à des données en bdd
// les données sont récupérées via API propriétaire
// lancement des producteurs
// la classe chargement RA se charge de traiter tous les objets de la liste des taches du projet (ListeTaskCA)
// pour chacune des taches, lancement d'un thread Producteur (ParallelChargeRA)
ChargementRA ajoutRA = new ChargementRA(listeTaskCA,proj,udf_field_EA,nbThreads);
ajoutRA.start();
// pour chaque truc écrit, on lance un conso
while(! (ajoutRA.isTerminated() && queueRA.isEmpty()))
while( (next = queueRA.poll()) != null ) {
try {
threadPoolReader.execute(new ParallelFinance(epsId,projWBS,next,listeValeurs/*,connexion*/,datadate/*,listActPostTraitement*/));
} catch(RejectedExecutionException ree) {
printAndTrace("[ERROR] Impossible d'exécuter la tache : "+ree.getMessage());
ree.printStackTrace();
nbException++;
}
}
}
... // on attend la fin des consommateurs
// on lance la procédure d'insertion des données en bdd
}//while projet
}//class |
Partager