2

Jaspersoft Server に Bean DataSource (Bean のコレクション) を追加するための段階的な手順を教えてください。サーバーが認識できるようにjarfileをプッシュするだけの簡単なプロセスはありますか?

これが私が行った手順です(簡略化された名前)

Studio プロジェクト内

  • フィールドと getter/setter を含むPersonという Java Bean を作成します。

  • com.company.test.PersonFactoryという名前のデータベースに接続する単純な Java クラスを作成します。これにはListを返すメソッドgenerator()があり、単純な jdbc 呼び出しを使用します。両方のクラスが私の Jasper プロジェクトにあります。

  • testBeanというデータ アダプタを作成し、ファクトリ クラスとしてcom.company.test.PersonFactoryを入力し、ファクトリの静的メソッドとしてジェネレータを入力しました。

  • 新しい jasper レポート ( testReport1 ) を作成し、Data Adapter testBeanを使用します。[Java Bean] タブをクリックし、クラス名としてPersonを入力し、すべてのフィールドを追加し、データ プレビューを確認して、保存します。

リポジトリ エクスプローラーで

  • 新しいデータ ソース > データ ソース Bean を作成し、名前と ID としてbean1を入力します。

  • Bean 名と Bean メソッドのページで、 Jaspersoft Studio からのインポートを選択し、 testBeanを選択して、[完了] をクリックします。

Studio プロジェクト内

  • Jaspersoft Studio でのデータ プレビューが機能していることを確認した後、Jasper Server でレポートを公開します。

  • bean1データソースを選択して公開する

Jaspersoft サーバーで

レポート testReport1 を実行します

エラーを取得する

org.springframework.beans.factory.NoSuchBeanDefinitionException: 「com.company.test.PersonFactory」という名前の Bean が org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:575) で定義されていません

org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1111) で

org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:276) で org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:191) で org.springframework.context.support. AbstractApplicationContext.getBean(AbstractApplicationContext.java:1119) で com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.BeanReportDataSourceServiceFactory.createService(BeanReportDataSourceServiceFactory.java:76) で sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ メソッド) で....

Beans と Factory が Jaspersoft Server でどのように認識されるかについて、最も簡単な手順を実行するのを手伝ってくれる人はいますか?

ありがとう

4

1 に答える 1

1

最初の質問から 1 週間後にこの問題を解決しました。答えを共有したかっただけです:

jaspersoft Bean DataSource には、ReportDataSourceServiceを実装するクラスを介してアクセスする必要があります。

次に、プライベート変数が必要です

private JRBeanCollectionDataSource dataSource;

また、2つのメソッドをオーバーライドする必要があります

@Override
public void closeConnection() {
    // TODO Auto-generated method stub

}

@Override
public void setReportParameterValues(Map parameterMap) {
    parameterMap.put(JRParameter.REPORT_DATA_SOURCE, dataSource);

}

次に、Jasper サーバーから、作成したReportDataSourceService実装クラスのコンストラクターを呼び出し、ReportDataSourceService タイプを返すファクトリ クラスを定義する必要があります。

于 2016-09-27T06:40:01.643 に答える