Eclipse BIRTで参照するデータソースをJava側から変更させる方法
Eclipse BIRTとか使ってると、Eclipseで作業しているには問題無いけど動かす際にJDBCを利用する辺りの情報をJava等で操作出来るようにしたいとかっていうようなケースがあった場合どうすれば良いのか
import com.ibm.icu.util.ULocale;
import org.eclipse.birt.core.framework.Platform;
import org.eclipse.birt.report.data.oda.jdbc.Connection;
import org.eclipse.birt.report.data.oda.jdbc.OdaJdbcDriver;
import org.eclipse.birt.report.model.api.DesignConfig;
import org.eclipse.birt.report.model.api.IDesignEngine;
import org.eclipse.birt.report.model.api.IDesignEngineFactory;
import org.eclipse.birt.report.model.api.OdaDataSourceHandle;
import org.eclipse.birt.report.model.api.ReportDesignHandle;
import org.eclipse.birt.report.model.api.SessionHandle;
public class Client {
public static void main(String[] args) throws Exception {
Platform.startup();
IDesignEngineFactory factory = (IDesignEngineFactory)Platform.createFactoryObject(
IDesignEngineFactory.EXTENSION_DESIGN_ENGINE_FACTORY
);
IDesignEngine engine = factory.createDesignEngine(new DesignConfig());
SessionHandle session = engine.newSessionHandle(ULocale.JAPANESE);
ReportDesignHandle handle = session.openDesign(
ClassLoader.getSystemResource("sample.rptdesign").getFile()
);
// 既にあるDataSourceを削除
handle.getDataSources().drop(0);
// データソースを作る。データセットが参照するデータソース名と合わせる事
OdaDataSourceHandle dsHandle = handle.getElementFactory().newOdaDataSource(
"dsrc",
OdaJdbcDriver.Constants.DATA_SOURCE_ID
);
// JDBCドライバを設定
dsHandle.setProperty(
Connection.Constants.ODADriverClass,
"com.mysql.jdbc.Driver"
);
// JDBC接続URLWo設定
dsHandle.setProperty(
Connection.Constants.ODAURL,
"jdbc:mysql://localhost:3306/shop_test"
);
// JDBC接続ユーザーを設定
dsHandle.setProperty(
Connection.Constants.ODAUser,
"username"
);
// JDBC接続ユーザーのパスワードを設定
dsHandle.setProperty(
Connection.Constants.ODAPassword,
"password"
);
handle.getDataSources().add(dsHandle);
// 新しくレポートデザインファイルを生成する
handle.saveAs("report.rptdesign");
handle.close();
}
}
ReportDesignHandle#saveメソッドもあるのだけど、やっても反映されなかったので新しくレポートデザインファイルを生成。あとはこれを使ってレポートを出力する的な感じで