Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > BIRT
BIRT Forum d'entraide sur BIRT (Business Intelligence and Reporting Tools). Avant de poster --> FAQ BIRT,Tutoriels BIRT
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/07/2008, 09h52   #1
Invité de passage
 
Inscription : juillet 2008
Messages : 2
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 2
Points : 0
Points : 0
Par défaut [2.1.2 -> 2.3.0] ClassPath

Bonjour à tous,

Je viens de m'atteler à la tache de migrer ma plateforme BIRT en 2.3.0 ainsi que tous les rapports au sein de mon application java swing.
J'ai pour cela modifié ma Classe ReportRunner qui s'occupe de lancer l'engin BIRT, de lui passer le report design et de le lancer au format demandé (HTML ou PDF pour le moment).
Des objets java sont envoyé à BIRT précédemment via addScriptableJavaObject(), et maintenant à traver getAppContext().put de la tache.
Jusque la tout semble fonctionner. Je me heurte par contre à un problème au runtime ou les fonctions appelés sur certaines de mes classes ne sont pas reconnu, malgré les importPackage dans le script open de mon dataset. Une solution qui marchait très bien auparavant.
J'ai vu un message sur ce forum qui disant d'utiliser
Code :
engine.getConfig().getAppContext().put(EngineConstants.APPCONTEXT_CLASSLOADER_KEY,ReportEngine.class.getClassLoader());
pour contourner ce problème, mais cela ne marche pas

Alors si quelqu'un a déhà résolu le problème et peut me donner un coup de main, cela m'éviterai de m'arracher les cheveux qu'ils me restent !!

Voici la fonction de ma classe qui instantie l'engine BIRT et lance le rapport

Code :
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
    /**
     * runs the report on the BIRT runtime env.
     * @param format 
     */
    public void run(String format) {
    	String engineHome = mBirtRuntimeLocation;
    	IReportEngine engine = null;
    	IReportRunnable design = null;
 
    	// Intialise the report engine
    	try{
    		final EngineConfig config = new EngineConfig();
    		setStatusMessage(SystemLocalizer.getInstance().getText("REP_LAB_StatusLaunchEngine"));
    		config.setBIRTHome(engineHome);
    		config.setEngineHome(engineHome);
    		config.setLogConfig(mLogFolder,getRequiredBirtLoggingLevel(mBirtLogLevel));
 
    		Platform.startup( config );
    		IReportEngineFactory factory = (IReportEngineFactory) Platform.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
    		engine = factory.createReportEngine( config );
    		engine.changeLogLevel(getRequiredBirtLoggingLevel(mBirtLogLevel));
    		engine.getConfig().getAppContext().put(EngineConstants.APPCONTEXT_CLASSLOADER_KEY,ReportEngine.class.getClassLoader());
    	}catch( BirtException ex){
    		stopProgressBar();
			showErrMsg("REP_LAB_BirtRuntimeNotFound", "REP_LAB_BirtRuntimeNotFoundTitle");
			setStatusMessage(SystemLocalizer.getInstance().getText("REP_LAB_StatusErrorBirtLocation"));
    	}
 
		// Open the report design
		try{
			setStatusMessage(SystemLocalizer.getInstance().getText("REP_LAB_StatusAccessReport"));
			design = engine.openReportDesign(openStreamOnHttpServer(mReportName));
		}
		catch(NullPointerException e){
			stopProgressBar();
			showErrMsg("REP_LAB_BirtRuntimeNotFound", "REP_LAB_BirtRuntimeNotFoundTitle");
			setStatusMessage(SystemLocalizer.getInstance().getText("REP_LAB_StatusErrorBirtLocation"));
		}
        catch (EngineException e) {
            setStatusMessage(SystemLocalizer.getInstance().getText("REP_LAB_StatusErrorReportNotFound")+ mReportName);
            engine.destroy();
            stopProgressBar();
            return;
        }
 
    	// Run report
        //Create task to run and render the report,
        IRunAndRenderTask task = engine.createRunAndRenderTask(design); 
        //Set parent classloader for engine
        mOutput = computeTargetedPath(mHtmlTarget, format.toLowerCase());
 
        //Set parameter values and validate
        if(mList.size()!=0){
        	task.getAppContext().put("ListOfClipSlots", mList);
        	task.getAppContext().put("StartDate", mStartDate);
        	task.getAppContext().put("EndDate", mEndDate);
        	task.getAppContext().put("mScriptParameters", mScriptParameters);
	        task.setParameterValues(mParametersMap);
 
	        if(mStartDate2!=null && mEndDate2 !=null){
	        	task.getAppContext().put("StartDate2", mStartDate2);    
	        	task.getAppContext().put("EndDate2", mEndDate2);
	        }
 
	        // Set the rendering options
			IRenderOption options = new RenderOption();		
			options.setOutputFormat("html");
			options.setOutputFileName(mOutput);
 
			if(format.equals("HTML")){
				HTMLRenderOption htmlOptions = new HTMLRenderOption( options);
				htmlOptions.setHtmlPagination(false);
				htmlOptions.setHtmlRtLFlag(false);
				htmlOptions.setEmbeddable(false);
				task.setEmitterID("org.eclipse.birt.report.engine.emitter.html");
 
			} else {
				PDFRenderOption pdfOptions = new PDFRenderOption( options );
				pdfOptions.setOption( IPDFRenderOption.FIT_TO_PAGE, new Boolean(true) );
				pdfOptions.setOption( IPDFRenderOption.PAGEBREAK_PAGINATION_ONLY, new Boolean(true) );
	            task.setEmitterID("org.eclipse.birt.report.engine.emitter.pdf");
			}
 
			task.setRenderOption(options);
 
	        // Run the report.
	        try {
	        	setStatusMessage(SystemLocalizer.getInstance().getText("REP_LAB_StatusRenderingReport"));
	        	task.run();
	        } catch (EngineException e1) {
	        	stopProgressBar();
	        	setStatusMessage(SystemLocalizer.getInstance().getText("REP_LAB_StatusErrorRenderingReport"));
	        }
 
	        // Launch viewer if requested
	        if(mLaunchViewer){
	        	try {
	        		Runtime.getRuntime().exec(new String[]{"rundll32", "url.dll,FileProtocolHandler", mOutput});
	        	} catch (IOException e) {
	        		e.printStackTrace();
	        		setStatusMessage(SystemLocalizer.getInstance().getText("REP_LAB_StatusErrorViewerFailed"));
	        		stopProgressBar();
	        		mProgressLabel.addMessage(SystemLocalizer.getInstance().getText("REP_LAB_StatusErrorViewerFailed"));
	        	}
	        }
	        setStatusMessage(SystemLocalizer.getInstance().getText("REP_LAB_StatusReportGenerationSuccess"));
 
        } else {
        	setStatusMessage("No data found...");
            stopProgressBar();
        }
 
    	// destroy the engine.
   		task.close();
   		engine.destroy();
   		Platform.shutdown();    
    }
Le code de open du dataset dans le rapport:

Code :
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
currentrow = 0;
totalrows =  0;
 
importPackage(Packages.java.util);
importPackage(Packages.java.lang);
importPackage(Packages.com.lysis.idtv3.api.material.entities);
importPackage(Packages.com.lysis.idtv3.api.content.entities);
importPackage(Packages.com.lysis.toolkit.type);
importPackage(Packages.com.lysis.toolkit.localization);
formatter = SystemType.getManager().getExportFormat("DurationFrame", "ExportPattern");
 
appContext = reportContext.getAppContext();
mAssetList = appContext.get("ListOfClipSlots");
totalrows = mAssetList.size();
mSegmentList = new ArrayList();
 
var index;
for(index = 0; index<totalrows ; index++){
	tmpAsset = mAssetList.get(index);
 
	if(tmpAsset.getSegments() != null){
		var index2;
		for(index2 = 0; index2<tmpAsset.getSegments().size(); index2++) {
			segment = tmpAsset.getSegments().get(index2);
			if(segment instanceof DtvSequentialSegment) {
				mSegmentList.add(segment);
			}
		}
	}
}

et l'erreur qui survient au lancement du rapport:


Citation:
[java] 08-Jul-2008 09:30:26 org.eclipse.birt.report.engine.script.internal.DtEScriptExecutor handleJS
[java] WARNING: A BIRT exception occurred: Error evaluating Javascript expression. Script engine error: TypeError: Cannot find function getSegments. (<inline>#22)
[java] Script source: <inline>, line: 1, text:
[java] __bm_OPEN(). See next exception for more information.
[java] Error evaluating Javascript expression. Script engine error: TypeError: Cannot find function getSegments. (<inline>#22)
[java] Script source: <inline>, line: 1, text:
[java] __bm_OPEN()
[java] org.eclipse.birt.data.engine.core.DataException: A BIRT exception occurred: Error evaluating Javascript expression. Script engine error: TypeError: Cannot find function getSegments. (<inline>#22)
[java] Script source: <inline>, line: 1, text:
Je continue mes recherches et vous tiens au courant.
Merci d'avance et bonne journée (la mienne risque d'etre plus dure!!)

Greg
Phocea est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 09h59   #2
BiM
Modératrice
 
Avatar de BiM
 
Femme
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
Inscription : janvier 2005
Messages : 7 299
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

Informations forums :
Inscription : janvier 2005
Messages : 7 299
Points : 8 650
Points : 8 650
Bonjour,

Et mList est le bon type ?
__________________
__~{@ BiM - Modératrice "Business Intelligence" @}~
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
___________.~{@ Lapine crétine @}~
BiM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 11h06   #3
Invité de passage
 
Inscription : juillet 2008
Messages : 2
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 2
Points : 0
Points : 0
mList est défini comme une liste qui contient tout les objets java necessaire à la creation du rapport. Ces objets sont du bon type lors de l'envoi à BIRT .. quand ils sont transmis dans mAssetList ca je ne sais pas (on peut debuger ?)

J'ai aussi editer un bout du script run (erreur de copier coller ou j'envoyer toujours mList dans la map de AppContext justement
Phocea est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2008, 14h24   #4
Invité régulier
 
Inscription : octobre 2006
Messages : 17
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 17
Points : 6
Points : 6
J'ai aussi eu des soucis de classpath pour que birt trouve mes classes.
Sur l'objet task (de type IRunAndRenderTask), j'ai dû faire :
task.getAppContext().put(EngineConstants.APPCONTEXT_CLASSLOADER_KEY, Thread.currentThread().getContextClassLoader());

De cette manière, Birt utilise le classloader de mon application et non le sien. Il trouve donc mes classes.
Stephane73 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2008, 18h00   #5
Invité de passage
 
Inscription : décembre 2008
Messages : 1
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 1
Points : 1
Points : 1
Par défaut solution potentielle

J'ai rencontré le même problème, et il s'est avéré que mes classes java étaient compilées en 1.6, et que mon server Tomcat fonctionnait avec un java 1.5.
J'ai recompilé mes classes java en 1.5 et tout a fonctionné !
Le problème surevenait avec l'intégration jee et WebViewerExample du runtime de BIRT. Mon jar se trouve dans le répertoire WebViewerExample/scriptlib.
laurent.garcia est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h09.


 
 
 
 
Partenaires

Hébergement Web