AssertionError con la API del motor de ejecución BIRT
Pregunta
Soy nuevo en BIRT y estoy intentando que Report Engine se ejecute.Estoy usando los fragmentos de código proporcionados en http://www.eclipse.org/birt/phoenix/deploy/reportEngineAPI.php
Pero tengo una extraña excepción:
java.lang.assertionError en org.eclipse.birt.core.framework.platform.startup (plataforma.java:86)
y nada en el archivo de registro.
¿Quizás me perdí algo en la configuración?¿Alguien podría darme una pista sobre lo que puedo intentar para que funcione?
Aquí está el código que estoy usando:
public static void executeReport()
{
IReportEngine engine=null;
EngineConfig config = null;
try{
config = new EngineConfig( );
config.setBIRTHome("D:\\birt-runtime-2_3_0\\ReportEngine");
config.setLogConfig("d:/temp", Level.FINEST);
Platform.startup( config );
IReportEngineFactory factory = (IReportEngineFactory) Platform
.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
engine = factory.createReportEngine( config );
IReportRunnable design = null;
//Open the report design
design = engine.openReportDesign("D:\\birt-runtime-2_3_0\\ReportEngine\\samples\\hello_world.rptdesign");
IRunAndRenderTask task = engine.createRunAndRenderTask(design);
HTMLRenderOption options = new HTMLRenderOption();
options.setOutputFileName("output/resample/Parmdisp.html");
options.setOutputFormat("html");
task.setRenderOption(options);
task.run();
task.close();
engine.destroy();
}catch( Exception ex){
ex.printStackTrace();
}
finally
{
Platform.shutdown( );
}
}
Solución
Sólo una idea, pero me pregunto si el uso de una barra diagonal al configurar el registrador está causando un problema.en lugar de
config.setLogConfig("d:/temp", Level.FINEST);
Deberías usar
config.setLogConfig("/temp", Level.FINEST);
o
config.setLogConfig("d:\\temp", Level.FINEST);
Finalmente, me doy cuenta de que esto es solo un código de muestra, pero seguramente querrás dividir el código de inicio de tu plataforma de tu tarea de ejecución y renderizado.El inicio de la plataforma es muy costoso y sólo debe realizarse una vez por sesión.
Tengo un par de proyectos de Eclipse configurados en un servidor Subversion que demuestran cómo usar la API del motor de informes (REAPI) y la API del motor de diseño (DEAPI) que pueden resultarle útiles a medida que su código se vuelve más complicado.
Para obtener los ejemplos, necesitará los complementos Subclipse o Subversive y luego deberá conectarse al siguiente repositorio:
http://longlake.minnovent.com/repos/birt_example
Los proyectos que necesitas son:
birt_api_example
birt_runtime_lib
script.lib
Es posible que necesite ajustar algunas de las ubicaciones de los archivos en la clase BirtUtil, pero creo que la mayoría de las ubicaciones de los archivos son rutas relativas.Hay más información sobre cómo utilizar los proyectos de ejemplo en mi blog en http://birtworld.blogspot.com.En particular, este artículo debería ayudar: Pruebas y depuración de informes
Otros consejos
Tuve el mismo error hace un par de meses.No estoy muy seguro de qué lo solucionó realmente, pero mi código se parece al siguiente:
IDesignEngine engine = null;
DesignConfig dConfig = new DesignConfig();
EngineConfig config = new EngineConfig();
IDesignEngineFactory factory = null;
config.setLogConfig(LOG_DIRECTORY, Level.FINE);
HttpServletRequest servletRequest = (HttpServletRequest) FacesContext.getCurrentInstance()
.getExternalContext().getRequest();
String u = servletRequest.getSession().getServletContext().getRealPath("/");
File f = new File(u + PATH_TO_ENGINE_HOME);
log.debug("setting engine home to:"+f.getAbsolutePath());
config.setEngineHome(f.getAbsolutePath());
Platform.startup(config);
factory = (IDesignEngineFactory) Platform.createFactoryObject(IDesignEngineFactory.EXTENSION_DESIGN_ENGINE_FACTORY);
engine = factory.createDesignEngine(dConfig);
SessionHandle session = engine.newSessionHandle(null);
this.design = session.openDesign(u + PATH_TO_MAIN_DESIGN);
Quizás puedas resolver tu problema comparando este fragmento de código y tu propio código.Por cierto, mi PATH_TO_ENGINE_HOME es "/WEB-INF/plataforma".[editar] Utilicé la carpeta "plataforma" completa del WebViewerExample de birt-runtime-2_1_1.atm birt-runtime-2_3_0 es real.[/editar]
Si esto no ayuda, proporcione algunos detalles más (por ejemplo, un fragmento de código).