Hello Community,
Since integration of BIRT 2.6, it has been fairly easy to generate large excel reports. By mentioning large I mean to say such reports which has more than 64k rows.
I tried this in a Windows box and it was working all well.
But, the same code when ported to a UNIX box, it fails because of some permission issue. The stack trace is as follows:
By pondering on the exception I have figured out the possible reason to be the lacking permission in '/' directory.
Now a few things that I don't have any idea are:
1) Why is the '/' considered as temp, it could have been '/tmp'
2) Is there any way that I can override this feature and assign a different temp directory
3) The code snippet to start the engine follows, is there anything else that can be done here
Need help ASAP!!!
regards
Arpan
Since integration of BIRT 2.6, it has been fairly easy to generate large excel reports. By mentioning large I mean to say such reports which has more than 64k rows.
I tried this in a Windows box and it was working all well.
But, the same code when ported to a UNIX box, it fails because of some permission issue. The stack trace is as follows:
Dec 29, 2010 9:25:16 AM org.eclipse.birt.report.engine.emitter.excel.ExcelEmitter outputSheet SEVERE: /tmp_BIRTEMITTER_EXCEL_TEMP_FILE27 (Permission denied) java.io.FileNotFoundException: /tmp_BIRTEMITTER_EXCEL_TEMP_FILE27 (Permission denied) at java.io.FileOutputStream.open(Native Method) at java.io.FileOutputStream.<init>(FileOutputStream.java:179) at java.io.FileOutputStream.<init>(FileOutputStream.java:70) at org.eclipse.birt.report.engine.emitter.excel.ExcelWriter.initializeWriterAsTempWriter(ExcelWriter.java:166) at org.eclipse.birt.report.engine.emitter.excel.ExcelWriter.startSheet(ExcelWriter.java:151) at org.eclipse.birt.report.engine.emitter.excel.ExcelEmitter.outputCacheData(ExcelEmitter.java:543) at org.eclipse.birt.report.engine.emitter.excel.ExcelEmitter.outputSheet(ExcelEmitter.java:502) at org.eclipse.birt.report.engine.emitter.excel.layout.ExcelLayoutEngine.outputDataIfBufferIsFull(ExcelLayoutEngine.java:1050) at org.eclipse.birt.report.engine.emitter.excel.layout.ExcelLayoutEngine.addData(ExcelLayoutEngine.java:933) at org.eclipse.birt.report.engine.emitter.excel.layout.ExcelLayoutEngine.addData(ExcelLayoutEngine.java:665) at org.eclipse.birt.report.engine.emitter.excel.ExcelEmitter.addDataContent(ExcelEmitter.java:433) at org.eclipse.birt.report.engine.emitter.excel.ExcelEmitter.startData(ExcelEmitter.java:390) at org.eclipse.birt.report.engine.emitter.CompositeContentEmitter.startData(CompositeContentEmitter.java:258) at org.eclipse.birt.report.engine.emitter.ContentEmitterUtil.startContent(ContentEmitterUtil.java:71) at org.eclipse.birt.report.engine.layout.html.HTMLTableLayoutEmitter.startContent(HTMLTableLayoutEmitter.java:146) at org.eclipse.birt.report.engine.emitter.ContentEmitterAdapter.startText(ContentEmitterAdapter.java:147) at org.eclipse.birt.report.engine.emitter.ContentEmitterAdapter.startData(ContentEmitterAdapter.java:163) at org.eclipse.birt.report.engine.emitter.ContentEmitterUtil.startContent(ContentEmitterUtil.java:71) at org.eclipse.birt.report.engine.layout.html.buffer.DummyPageBuffer.startContent(DummyPageBuffer.java:125) at org.eclipse.birt.report.engine.layout.html.HTMLLeafItemLM.start(HTMLLeafItemLM.java:67) at org.eclipse.birt.report.engine.layout.html.HTMLAbstractLM.layout(HTMLAbstractLM.java:139) at org.eclipse.birt.report.engine.layout.html.HTMLBlockStackingLM.layoutNodes(HTMLBlockStackingLM.java:70) at org.eclipse.birt.report.engine.layout.html.HTMLStackingLM.layoutChildren(HTMLStackingLM.java:26) at org.eclipse.birt.report.engine.layout.html.HTMLAbstractLM.layout(HTMLAbstractLM.java:140) at org.eclipse.birt.report.engine.layout.html.HTMLInlineStackingLM.resumeLayout(HTMLInlineStackingLM.java:111) at org.eclipse.birt.report.engine.layout.html.HTMLInlineStackingLM.layoutNodes(HTMLInlineStackingLM.java:160) at org.eclipse.birt.report.engine.layout.html.HTMLStackingLM.layoutChildren(HTMLStackingLM.java:26) at org.eclipse.birt.report.engine.layout.html.HTMLAbstractLM.layout(HTMLAbstractLM.java:140) at org.eclipse.birt.report.engine.layout.html.HTMLBlockStackingLM.layoutNodes(HTMLBlockStackingLM.java:70) at org.eclipse.birt.report.engine.layout.html.HTMLStackingLM.layoutChildren(HTMLStackingLM.java:26) at org.eclipse.birt.report.engine.layout.html.HTMLTableBandLM.layoutChildren(HTMLTableBandLM.java:67) at org.eclipse.birt.report.engine.layout.html.HTMLAbstractLM.layout(HTMLAbstractLM.java:140) at org.eclipse.birt.report.engine.layout.html.HTMLBlockStackingLM.layoutNodes(HTMLBlockStackingLM.java:70) at org.eclipse.birt.report.engine.layout.html.HTMLStackingLM.layoutChildren(HTMLStackingLM.java:26) at org.eclipse.birt.report.engine.layout.html.HTMLTableLM.layoutChildren(HTMLTableLM.java:132) at org.eclipse.birt.report.engine.layout.html.HTMLAbstractLM.layout(HTMLAbstractLM.java:140) at org.eclipse.birt.report.engine.layout.html.HTMLBlockStackingLM.layoutNodes(HTMLBlockStackingLM.java:70) at org.eclipse.birt.report.engine.layout.html.HTMLPageLM.layout(HTMLPageLM.java:90) at org.eclipse.birt.report.engine.layout.html.HTMLReportLayoutEngine.layout(HTMLReportLayoutEngine.java:99) at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.doRun(RunAndRenderTask.java:172) at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.run(RunAndRenderTask.java:75)
By pondering on the exception I have figured out the possible reason to be the lacking permission in '/' directory.
Now a few things that I don't have any idea are:
1) Why is the '/' considered as temp, it could have been '/tmp'
2) Is there any way that I can override this feature and assign a different temp directory
3) The code snippet to start the engine follows, is there anything else that can be done here
URL url = RunBillTask.class.getResource( taskParameters.getDesignFileName() ); if ( url == null ) throw new RunBillTaskException( "Cannot find file " + taskParameters.getDesignFileName() ); // Get the complete file name String strRptDesign = url.getFile(); IReportEngine engine = null; String strOutputFileName = ""; try { EngineConfig config = new EngineConfig(); String birtHome; birtHome = System.getenv( "BIRT_HOME" ); if ( birtHome == null ) throw new BillException( "BIRT_HOME not set in system properties" ); config.setEngineHome( birtHome ); config.setLogConfig( FileHelper.sparkTempPath, Level.FINE ); Platform.startup( config ); IReportEngineFactory factory = (IReportEngineFactory)Platform.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY ); engine = factory.createReportEngine( config ); engine.changeLogLevel( Level.SEVERE ); // Open a report design IReportRunnable design; design = engine.openReportDesign( strRptDesign ); // Create task to run the report - use the task to execute the // report and save to disk. IRunAndRenderTask task = engine.createRunAndRenderTask( design ); RenderOption options = null; if(taskParameters.getExtension().equals(PDF_EXTENSION)) { options = new PDFRenderOption(); } else if(taskParameters.getExtension().equals(EXCEL_EXTENSION)) { options = new EXCELRenderOption(); ((EXCELRenderOption)options).setWrappingText(true); } strOutputFileName = FileHelper.sparkTempPathFile + "/" + taskParameters.getOutputFileName() + "." + taskParameters.getExtension(); options.setOutputFileName( strOutputFileName ); options.setOutputFormat( taskParameters.getExtension() ); task.setRenderOption( options ); // Supply the input parameters for ( ParameterMap< Integer > parameter : taskParameters.getIntParameterList() ) { task.setParameterValue( parameter.key, parameter.value ); } for ( ParameterMap< String > parameter : taskParameters.getStrParameterList() ) { task.setParameterValue( parameter.key, parameter.value ); } for ( ParameterMap< Boolean > parameter : taskParameters.getBoolParameterList() ) { task.setParameterValue( parameter.key, parameter.value ); } for ( ParameterMap< Double > parameter : taskParameters.getDecimalParameterList() ) { task.setParameterValue( parameter.key, parameter.value ); } for ( ParameterMap< Float > parameter : taskParameters.getFloatParameterList() ) { task.setParameterValue( parameter.key, parameter.value ); } // run the report and destroy the engine task.run(); task.close();
Need help ASAP!!!
regards
Arpan