Apres plusieurs tentatives avortées, je me tourne vers vous.
J'ai une grosse table(environ 200 000 lignes) dont je dois afficher les lignes et sur laquelle je dois effectuer un filtre.
J'ai essayé 2 solutions ms dans les 2 cas, il est impossible d'afficher toute la collection de données(timeout), j'en affiche donc que 10 000. Par contre, pour mon filtre il me faut toutes les données.
1)avec les EJB, pour l'affichage ça ne pose pas de probleme par contre, comme pour le filtre ça pose pb. Je récupere une collection de données de la façon suivante:
C'est cette fontion qui a du mal à s'executer!!!!
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 public Collection getDonnees() throws TechniqueUtilException{ try { //appel de la requete ejb ql declaree dans le descripteur Collection colDonnees = tr_partenrLocalHome.findAll(); Collection colPartenrDTO = new ArrayList(); for(Iterator itColDonnees = colDonnees.iterator();itColDonnees.hasNext();){ //creation du nouveau dto PartenrDTO partenrdto = new PartenrDTO(); //recuperation de chaque dto de la collection Tr_partenrLocal tr_partenrLocal = (Tr_partenrLocal) itColDonnees.next(); //recuperation de la cle Tr_partenrKey key =(Tr_partenrKey) tr_partenrLocal.getPrimaryKey(); //set de la cle dans le nouveau dto partenrdto.setIdPartenr(key.partenr_id); //set du libellé dans le nouveau dto partenrdto.setPartn6Id(tr_partenrLocal.getPartn6_id()); //recuperation des cles etrangeres Tr_partn1Key key2 = (Tr_partn1Key) tr_partenrLocal.getFk_tr_partn1().getPrimaryKey(); Tr_partn2Key key3 = (Tr_partn2Key) tr_partenrLocal.getFk_tr_partn2().getPrimaryKey(); Tr_partn3Key key4 = (Tr_partn3Key) tr_partenrLocal.getFk_tr_partn3().getPrimaryKey(); Tr_partn4Key key5 = (Tr_partn4Key) tr_partenrLocal.getFk_tr_partn4().getPrimaryKey(); Tr_partn5Key key6 = (Tr_partn5Key) tr_partenrLocal.getFk_tr_partn5().getPrimaryKey(); //set des partn id dans le nouveau dto partenrdto.setPartn1Id(key2.partn1_id); partenrdto.setPartn2Id(key3.partn2_id); partenrdto.setPartn3Id(key4.partn3_id); partenrdto.setPartn4Id(key5.partn4_id); partenrdto.setPartn5Id(key6.partn5_id); //recuperation des partnLocal via la cle Tr_partn1Local tr_partn1Local = tr_partn1LocalHome.findByPrimaryKey(key2); Tr_partn2Local tr_partn2Local = tr_partn2LocalHome.findByPrimaryKey(key3); Tr_partn3Local tr_partn3Local = tr_partn3LocalHome.findByPrimaryKey(key4); Tr_partn4Local tr_partn4Local = tr_partn4LocalHome.findByPrimaryKey(key5); Tr_partn5Local tr_partn5Local = tr_partn5LocalHome.findByPrimaryKey(key6); //set des libelles partn partenrdto.setPartn1Lib(tr_partn1Local.getPartn1_lib()); partenrdto.setPartn2Lib(tr_partn2Local.getPartn2_lib()); partenrdto.setPartn3Lib(tr_partn3Local.getPartn3_lib()); partenrdto.setPartn4Lib(tr_partn4Local.getPartn4_lib()); partenrdto.setPartn5Lib(tr_partn5Local.getPartn5_lib()); //ajout du dto à notre collection de retour colPartenrDTO.add(partenrdto); } return colPartenrDTO; } catch (Exception e) { throw new TechniqueUtilException(e.getMessage()); } }
Pour l'affichage, je fais:
et là, pas de probleme!
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 public Collection getDonneesTronquees() throws TechniqueUtilException{ try { //appel de la requete ejb ql declaree dans le descripteur Collection colDonnees = tr_partenrLocalHome.findAll(); Collection colPartenrDTO = new ArrayList(); int i =0; for(Iterator itColDonnees = colDonnees.iterator();i<10000;i++){ //creation du nouveau dto PartenrDTO partenrdto = new PartenrDTO(); //recuperation de chaque dto de la collection Tr_partenrLocal tr_partenrLocal = (Tr_partenrLocal) itColDonnees.next(); //recuperation de la cle Tr_partenrKey key =(Tr_partenrKey) tr_partenrLocal.getPrimaryKey(); //set de la cle dans le nouveau dto partenrdto.setIdPartenr(key.partenr_id); //set du libellé dans le nouveau dto partenrdto.setPartn6Id(tr_partenrLocal.getPartn6_id()); //recuperation des cles etrangeres Tr_partn1Key key2 = (Tr_partn1Key) tr_partenrLocal.getFk_tr_partn1().getPrimaryKey(); Tr_partn2Key key3 = (Tr_partn2Key) tr_partenrLocal.getFk_tr_partn2().getPrimaryKey(); Tr_partn3Key key4 = (Tr_partn3Key) tr_partenrLocal.getFk_tr_partn3().getPrimaryKey(); Tr_partn4Key key5 = (Tr_partn4Key) tr_partenrLocal.getFk_tr_partn4().getPrimaryKey(); Tr_partn5Key key6 = (Tr_partn5Key) tr_partenrLocal.getFk_tr_partn5().getPrimaryKey(); //set des partn id dans le nouveau dto partenrdto.setPartn1Id(key2.partn1_id); partenrdto.setPartn2Id(key3.partn2_id); partenrdto.setPartn3Id(key4.partn3_id); partenrdto.setPartn4Id(key5.partn4_id); partenrdto.setPartn5Id(key6.partn5_id); //recuperation des partnLocal via la cle Tr_partn1Local tr_partn1Local = tr_partn1LocalHome.findByPrimaryKey(key2); Tr_partn2Local tr_partn2Local = tr_partn2LocalHome.findByPrimaryKey(key3); Tr_partn3Local tr_partn3Local = tr_partn3LocalHome.findByPrimaryKey(key4); Tr_partn4Local tr_partn4Local = tr_partn4LocalHome.findByPrimaryKey(key5); Tr_partn5Local tr_partn5Local = tr_partn5LocalHome.findByPrimaryKey(key6); //set des libelles partn partenrdto.setPartn1Lib(tr_partn1Local.getPartn1_lib()); partenrdto.setPartn2Lib(tr_partn2Local.getPartn2_lib()); partenrdto.setPartn3Lib(tr_partn3Local.getPartn3_lib()); partenrdto.setPartn4Lib(tr_partn4Local.getPartn4_lib()); partenrdto.setPartn5Lib(tr_partn5Local.getPartn5_lib()); //ajout du dto à notre collection de retour colPartenrDTO.add(partenrdto); } return colPartenrDTO; } catch (Exception e) { throw new TechniqueUtilException(e.getMessage()); } }
2)en faisant directement les requetes dans les actions. Le pb ici, c'est qu'à un moment, j'ai l'exception "java.lang.OutOfMemoryException". En d'autres termes, la MV n'a pas assez de mémoire.
Je suis donc dans une impasse.
Quelqu'un aurait une idée pour amiélorer les perf de mon appli?
Merci d'avance.
PS:Ne me laissez pas seule avec mon pb, svp!!!
[Modéré par Didier]
Ajout de tag dans le titre
Lire les règles du forum : Règles du forum Java
Partager