0

私はBIRTを初めて使用し、レポートエンジンを実行しようとしています。http://www.eclipse.org/birt/phoenix/deploy/reportEngineAPI.phpで提供されているコードスニペットを使用しています

しかし、奇妙な例外があります。

org.eclipse.birt.core.framework.Platform.startup(Platform.java:86)でのjava.lang.AssertionError

ログファイルには何もありません。

多分私は構成で何かを逃しましたか?誰かが私にそれを実行させるために何を試みることができるかについてのヒントを教えてもらえますか?

これが私が使用しているコードです:

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

2 に答える 2

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」です。[編集] birt-runtime-2_1_1 の WebViewerExample から完全な「プラットフォーム」フォルダーを使用しました。atm birt-runtime-2_3_0 は実際のものです。[/編集]

これで問題が解決しない場合は、さらに詳細を教えてください (コード スニペットなど)。

于 2008-09-17T11:37:50.553 に答える
1

考えただけですが、ロガーを設定するときにスラッシュを使用すると問題が発生するのでしょうか? それ以外の

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

あなたが使用する必要があります

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

また

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

最後に、これはサンプル コードにすぎませんが、実行およびレンダリング タスクからプラットフォームのスタートアップ コードを分割することをお勧めします。プラットフォームの起動は非常にコストがかかるため、セッションごとに 1 回だけ実行する必要があります。

Subversion サーバーにセットアップされた Eclipse プロジェクトがいくつかあります。これらは、レポート エンジン API (REAPI) とデザイン エンジン API (DEAPI) の使用方法を示しています。これらは、コードが複雑になるにつれて役立つ可能性があります。

サンプルを取得するには、Subclipse または Subversive プラグインが必要です。次に、次のリポジトリに接続する必要があります。

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

必要なプロジェクトは次のとおりです。

birt_api_example
birt_runtime_lib
script.lib

BirtUtil クラスのファイルの場所をいくつか調整する必要があるかもしれませんが、ほとんどのファイルの場所は相対パスだと思います。サンプル プロジェクトの使用方法については、http:/birtworld.blogspot.com の私のブログに詳しい情報があります。特に、この記事が役立ちます:レポートのテストとデバッグ

于 2008-09-18T14:53:11.310 に答える