[RESOLU] Problème Requête Mondrian/JPivot

Problème Requête Mondrian/JPivot [RESOLU] - Java - Programmation

Marsh Posté le 15-06-2010 à 09:29:28    

Bonjour,
 
Je suis entrain de développer une application en JAVA/J2EE avec du Mondrian/ JPivot mais j'ai quelques soucis de prise en compte des modifications dans la base de données.
 
Je m'explique:
 
Je lance l'application et je consulte par exemple des statistiques pour une date données.
Cependant si je rajoute des valeurs pour cette date dans la base de données et que j'actualise  
ma page elles ne sont pas prise en compte.
 
En gros si je consulte une date et que je rajoute des infos en bd pour une date consulté les modification pour cette date ne sont pas prise en compte mais je peux voir les modification pour les dates non visualisé avec l'application.
 
Voici un exemple de requête:
 

Code :
  1. with member [DATE].[Periode] as Aggregate([DATE].[Dates].[<%=debAnnee%>].[<%=debMois%>].[<%=debSem%>].[<%=debJour %>] : [DATE].[Dates].[<%=finAnnee%>].[<%=finMois%>].[<%=finSem%>].[<%=finJour %>])
  2. select  crossjoin( {[DATE].[Periode]},
  3.                    union({[TTTT_JJ].[Total]},[TTTT_JJ].[Total].children))  ON COLUMNS,
  4.        {[Measures].[Duree], [Measures].[longueur],[Measures].[nb]} ON ROWS
  5. from [Data]
  6. where [Objet].[Objets].[<%=objet%>]


 
 
Le seul moyen de pouvoir voir les modifications pour la date est de redeployer l'application !!!!
 
Je ne trouve pas du tout de solution à mon problème malgrès tout le temps que j'y passe plusieurs jours déjà...
 
Merci d'avance pour votre aide....


Message édité par lezert le 15-06-2010 à 13:48:33
Reply

Marsh Posté le 15-06-2010 à 09:29:28   

Reply

Marsh Posté le 15-06-2010 à 10:21:29    

Salut

 

Je connais pas du tout ton truc là, Mondrian/JPivot, mais ton problème m'a l'air d'etre un bete problème de cache.
Google donne ca: http://forums.pentaho.org/showthread.php?t=55902
Deux solutions proposées sur la page, et si elles marchent pas ya quand meme un gros aiguillage sur la source du problème...

 

Edit: et tiens voilà du boudin: http://forums.pentaho.org/showthread.php?t=51518


Message édité par lasnoufle le 15-06-2010 à 10:23:56

---------------
C'était vraiment très intéressant.
Reply

Marsh Posté le 15-06-2010 à 11:23:38    

Merci pour ta réponse, tu ma vraiment bien fait avancé...  
Je suis entrein de cherche comment vider ce fameux cache mondrian...
Mais si quelqu'un sait comment le vider ce fameux cache je suis preneur car j'ai essayé pas mal de truc pour le moment mais rien à faire !!!

Reply

Marsh Posté le 15-06-2010 à 11:53:42    

T'as essayé ca, donné dans le premier lien? -> mondrian.rolap.cache.CachePool.instance().flush();
Fais ca juste avant le chargement de ton truc JPivot.
 
Ton appli est construite comment? Tu dis que c'est Java/J2EE mais tu parles aussi de redéploiement, c'est une appli web? Ton bidule JPivot il est appelé/montré ou? Dans une page web, ou sur du Swing?


---------------
C'était vraiment très intéressant.
Reply

Marsh Posté le 15-06-2010 à 12:06:22    

lasnoufle a écrit :

T'as essayé ca, donné dans le premier lien? -> mondrian.rolap.cache.CachePool.instance().flush();
Fais ca juste avant le chargement de ton truc JPivot.
 
Ton appli est construite comment? Tu dis que c'est Java/J2EE mais tu parles aussi de redéploiement, c'est une appli web? Ton bidule JPivot il est appelé/montré ou? Dans une page web, ou sur du Swing?


 
 
Bonjour,
 
Oui il s'agit bien d'une application Web déployé sur JBoss avec du JSF pour l'IHM et utilisation de JPivot...
Mes requêtes JPivot sont dans une page JSP. Cependant d'après ce que j'ai compris grâce à ton lien, c'est que quand je réactualise la page les requêtes sont bien réexécuté mais avec des données en cache (Cache de Mondrian). Ainsi lors d'appel de requêtes similaire si j'ai bien compris il va chercher la réponse dans le cache...
 
J'ai alors essayé: mondrian.rolap.cache.CachePool.instance().flush();  
mais la méthode flush n'existe pas... D'après ce que j'ai compiris sur Internet elle était déprecated et donc elle a du être supprimer...
 
Je suis entrain de cherche sur internet comment faire pour vider ce fameux cache avant chacune de mes requêtes par exemple....
 
Mais bon, il est vrai qu'il n'y a a pas trop d'information sur tout ça !!!!
 
++
 
Maxime
 

Reply

Marsh Posté le 15-06-2010 à 12:29:04    

Ah OK, bon, une méthode n'est (quasiment) jamais déclarée deprecated sans que rien ne soit mis en place pour la remplacer, et généralement le remplacement est "meilleur".
 
Bon, je suppose que t'as trouvé ca: http://mondrian.pentaho.org/api/mo [...] ntrol.html
En gros, avec le second lien que j'ai filé au début, je dirais que tu peux tenter un truc du genre:

[pour chaque table que tu as modifié en dans la BD (je pense que c'est ce qui est dans le "from" de ta requete mais je connais pas du tout la syntaxe, donc tu sauras mieux que moi)]
 
Cube tableARafrachir = connection.getSchema().lookupCube("Data", true);
CacheControl.CellRegion regionARafraichir = cacheControl.createMemberRegion(tableARafrachir);
cacheControl.flush(regionARafraichir);

Après la page dis pas comment cacheControl est créé mais tu sauras ca mieux que moi.


---------------
C'était vraiment très intéressant.
Reply

Marsh Posté le 15-06-2010 à 13:47:59    

Je viens de résoudre mon problème...
 
Au début de chaque appel de ma page jsp, je fais:
 
<%
// Je vide le Cache Mondrian
java.util.Iterator<mondrian.rolap.RolapSchema> schemaIterator = mondrian.rolap.RolapSchema.getRolapSchemas();
while(schemaIterator.hasNext()){
mondrian.rolap.RolapSchema schema = schemaIterator.next();
mondrian.olap.CacheControl cacheControl = schema.getInternalConnection().getCacheControl(null);
cacheControl.flushSchemaCache();
}
%>  
 
Ce qui me permets de vider le cache et le recharger à chaque nouvelle requête !!!!!
 
Merci beaucoup pour ton aide lasnoufle !!!!!  
Tu m'a beaucoup aidé, je pense ques sans toit j'y serais encore....

Reply

Marsh Posté le 15-06-2010 à 13:59:09    

J't'en prie.
 
Par contre, meme si ca marche, d'après la doc, c'est pas du tout optimisé (en gros tu balourdes la totalité du cache, incluant la metadata des tables, à chaque fois). Bon, tant que t'as pas de problèmes de performance visibles je suppose que c'est pas un problème, si jamais ca commence à ramer tu sais ou creuser...
 
A+


---------------
C'était vraiment très intéressant.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed