2008-09-17 7 views
0

Я новичок в BIRT, и я пытаюсь запустить Engine Engine. Я использую фрагменты кода, представленные в http://www.eclipse.org/birt/phoenix/deploy/reportEngineAPI.phpAssertionError с BIRT Runtime Engine API

Но у меня есть странное исключение:

java.lang.AssertionError на org.eclipse.birt.core.framework.Platform.startup (Platform. java: 86)

и ничего в файле журнала.

Возможно, я что-то пропустил в конфигурации? Может ли кто-нибудь дать мне подсказку о том, что я могу попытаться запустить?

Вот код, я использую:

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(); 
     } 
    } 

ответ

1

Просто подумайте, но я задаюсь вопросом, вызывает ли ваше использование косую черту при настройке регистратора? вместо

config.setLogConfig("d:/temp", Level.FINEST); 

вы должны использовать

config.setLogConfig("/temp", Level.FINEST); 

или

config.setLogConfig("d:\\temp", Level.FINEST); 

Наконец, я понимаю, что это только некоторые примеры кода, но вы, конечно, хотите, чтобы разделить вашу платформу код запуска из вашей задачи запуска и рендеринга. Запуск платформы очень дорог и должен выполняться только один раз за сеанс.

У меня есть несколько проектов Eclipse, которые настроены на сервере Subversion, которые демонстрируют, как использовать API-интерфейс отчетов (REAPI) и API Engine Engine (DEAPI), которые могут оказаться полезными по мере того, как ваш код становится более сложным.

Чтобы получить примеры вам нужно либо Subclipse или подрывных плагинов, а затем вам нужно будет подключаться к следующему репозиторию:

http://longlake.minnovent.com/repos/birt_example 

Проекты, которые вам нужны являются:

birt_api_example 
birt_runtime_lib 
script.lib 

Возможно, вам придется настроить некоторые расположения файлов в классе BirtUtil, но я думаю, что большинство местоположений файлов являются относительным путем. Существует более подробная информация о том, как использовать проекты примеров в моем блоге по адресу http: /birtworld.blogspot.com. В частности, эта статья должна помочь: Testing And Debug of Reports

+0

Вы правы, это всего лишь образец кода, и идеи улучшений хороши. И черта не имеет значения - она ​​работает со всеми из них. Спасибо за ссылки на ресурсы! Наконец-то это сработало, но основная причина, по которой я его не буду использовать, заключается в том, что он хранит информацию о подключении как двоичный файл на диске. –

2

Я имел ту же ошибку, пару месяцев назад. Я не совсем уверен, что на самом деле установил его, но мой код выглядит следующим образом:

 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); 

Возможно, вы можете решить вашу проблему, сравнивая этот фрагмент кода и свой собственный код. Кстати, мой PATH_TO_ENGINE_HOME является «/ WEB-INF/platform». [edit] Я использовал полную «платформенную» -панель из WebViewerExample birt-runtime-2_1_1. atm birt-runtime-2_3_0. [/ edit]

Если это не поможет, пожалуйста, дайте несколько подробностей (например, фрагмент кода).

+0

10x, код почти такой же ...но у меня все еще есть исключение ... в любом случае я не буду использовать BIRT, но JasperReports - они работают :) –