EspressChart/EspressReportをどのようにJBOSS(Jakarta EEサーバ)と連携させて利用するか

EspressChartおよびEspressReportはJavaベースで開発されており、元々Jakarta EE(旧Java EE)環境での利用を前提として設計されています。そのため、JBoss (WildFly / JBoss EAP) とも非常に相性が良く、標準的なWebアプリケーションとしてシームレスに連携させることができます。

JBoss上で連携・稼働させる場合、大きく分けて「単独アプリケーションとしてのデプロイ」「既存アプリケーションへのAPI組み込み」の2つのアプローチがあります。

1. 連携の2つのアプローチ

A. 独立したWebアプリケーション (WAR) としての配置

EspressManager(バックエンド処理やスケジューラを担うサーバ)やReport Viewerを、1つの独立したWebアプリケーションとしてJBoss上で稼働させます。

  • デプロイ方法:用意されたモジュールを .war ファイルとしてまとめ、JBossの standalone/deployments/ ディレクトリに配置するだけで、JBossのオートデプロイ機能によって自動的に展開・起動されます。
  • JBoss固有の設定: 必要に応じてWARファイル内の WEB-INF/jboss-web.xml を編集し、コンテキストルート(URLパス)の指定や、JBoss特有のクラスローダーの挙動を制御します。

B. 既存のJakarta EEアプリへの直接組み込み (API連携)

独自に開発しているJBoss上の業務アプリケーション(Servlet、JSP、JAX-RSなど)に、レポートやチャートの生成エンジンを直接組み込む手法です。

  • 実装方法: Espressのライブラリ群(JARファイル)を、デプロイするアプリケーションの WEB-INF/lib に配置します。
  • APIの利用: アプリケーションのコード内から Report API / Chart API を数行呼び出すだけで、動的にチャートや帳票(PDF、HTML、画像フォーマットなど)を生成し、ユーザーへのHTTPレスポンスとして直接返すことができます。

2. JBossならではの連携メリットと設定ポイント

Jakarta EEサーバであるJBossで運用するからこそ活用できる、重要な連携ポイントがいくつかあります。

  • JNDIを利用したデータソース(データベース接続)の共有EspressReport/ChartはJDBC経由でデータソースにアクセスしますが、各レポートが個別にDBへ接続するのではなく、JBoss側(standalone.xml 等)で設定したコネクションプールを JNDI 経由でルックアップして利用することが推奨されます。これにより、データベース接続のライフサイクルやパフォーマンス管理をJBossに一任でき、システム全体の安定性が向上します。
  • Headlessモードでの安定したレンダリングUIを持たないLinuxサーバー上のJBossなどで画像やPDFをバックグラウンド描画する場合、JBossの起動スクリプト(standalone.conf)に JavaのHeadlessモードオプション (-Djava.awt.headless=true) を付与しておくことで、OSのGUI環境に依存せずに安全にレポートを生成できます。
  • リソースの一元管理レポートの生成にはメモリとCPUリソースを使用しますが、JBossのサーブレットコンテナ上で動かすことで、JBossのヒープメモリ管理やスレッドプールの恩恵を受けながら、エンタープライズ規模のアクセスに耐えうるスケーラブルな構成が構築できます。

EspressChart/EspressReportのAPIをJavaコード(Servlet等)に組み込むための具体的な手順と流れ

1. 準備:ライブラリとリソースの配置

コードを書く前に、JBoss上で動くWebアプリケーション(WARファイル)に必要なファイルを配置します。

  • JARファイルの配置 Espressのインストールディレクトリから提供されているAPIライブラリ(EspressAPI.jarqblicense.jar など必要な依存ファイル)を、プロジェクトの WEB-INF/lib ディレクトリに配置します。
  • テンプレートファイルの配置 専用のデザイナツールで事前に作成したテンプレートファイル(レポートなら .rpt、チャートなら .tpl)をサーバに配置します。 ※JBossの場合、WAR内に含める(WEB-INF/templates/ など)ことも可能ですが、運用保守の観点からサーバの特定の外部ディレクトリ(例: /opt/espress/templates/)に配置して絶対パスで読み込む方式が推奨されることが多いです。

2. Servletでの組み込み手順(実装ステップ)

実際のJavaコード(Servlet)内でAPIを呼び出す流れは以下のようになります。

ステップ1:レスポンスヘッダの設定

出力するフォーマット(PDF、HTML、画像など)に合わせて、HttpServletResponse のMIMEタイプ(ContentType)を設定します。

ステップ2:オブジェクトの生成(テンプレートのロード)

Quadbaseが提供するクラス(レポートなら QbReport、チャートなら QbChart)をインスタンス化し、テンプレートファイルを読み込ませます。

ステップ3:データの動的設定(オプション)

必要に応じて、ユーザーのリクエスト内容に基づいてパラメータを渡したり、JNDI経由で取得したデータベースの ResultSet をAPIに渡してデータを動的に差し替えます。

ステップ4:出力ストリームへのエクスポート

Servletの OutputStream に対して、APIのエクスポートメソッドを呼び出してレンダリング結果を直接書き出します。これにより、クライアント(ブラウザ)にファイルが返されます。

3. 具体的なコード例

以下は、クライアントからのリクエストに応じてPDF帳票(EspressReport)を動的に生成し、ブラウザに直接返すServletのサンプルコードです。

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

// EspressReportのAPIをインポート
import quadbase.reportdesigner.ReportAPI.QbReport;

@WebServlet(“/GenerateReportServlet”)
public class GenerateReportServlet extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException {
    
    // 1. レスポンスヘッダの設定(PDFとしてブラウザ内で表示)
    response.setContentType("application/pdf");
    response.setHeader("Content-Disposition", "inline; filename=\"sales_report.pdf\"");
    
    ServletOutputStream out = response.getOutputStream();
    
    try {
        // 2. テンプレートのパスを指定してQbReportオブジェクトを生成
        // ※ここでは外部ディレクトリにあるファイルを絶対パスで指定する例
        String templatePath = "/opt/espress/templates/sales_summary.rpt";
        QbReport report = new QbReport(templatePath);
        
        // 3. パラメータの動的設定 (例: リクエストから取得した「対象年」をセット)
        String targetYear = request.getParameter("year");
        if (targetYear != null) {
            // テンプレート側で定義された "YearParam" というパラメータに値を渡す
            report.setParameter("YearParam", targetYear);
        }
        
        // 4. OutputStreamに対してPDFフォーマットでエクスポート
        report.export(out, QbReport.PDF);
        
    } catch (Exception e) {
        // エラーハンドリング
        e.printStackTrace();
    } finally {
        // ストリームを閉じる
        out.flush();
        out.close();
    }
}

}

チャート(EspressChart)をPNG画像として返す場合: 使い勝手はレポートとほぼ同じです。QbChart クラスを使用します。

import quadbase.ChartAPI.QbChart;

// 1. 画像として設定
response.setContentType(“image/png”);
ServletOutputStream out = response.getOutputStream();

try {
// 2. テンプレート読み込み
QbChart chart = new QbChart(“/opt/espress/templates/bar_chart.tpl”);

// 3. 必要に応じてデータやタイトルの動的変更
chart.gethTitle().getText().setString("2026年 売上推移");

// 4. PNGとしてエクスポート
chart.export(QbChart.PNG, out);

} catch (Exception e) {
e.printStackTrace();
}

4. JBoss環境下での重要な注意事項

コードをJBoss上で安定して動作させるために、以下の点に注意してください。

  1. フォントの準備: Linux系のOS上でJBossを動かす場合、PDFや画像に日本語を描画するためには、OS側に日本語TrueTypeフォント(IPAフォントなど)がインストールされている必要があります。
  2. Headlessモードの有効化: 画像やPDFのレンダリングにはJavaのAWT(グラフィック描画機能)が内部で使用されます。UIを持たないサーバ環境で例外(HeadlessException)が発生するのを防ぐため、JBossの起動スクリプト(standalone.conf など)の JAVA_OPTS-Djava.awt.headless=true を必ず追加してください。
  3. ファイルパスの解決(JBoss VFSへの対応): JBossはデプロイされたWARファイルを仮想ファイルシステム(VFS)上で扱うことがあります。そのため、Servletの getServletContext().getRealPath("/")null を返したり、意図しない一時パスを返したりすることがあります。テンプレートファイルは外部ディレクトリに置くか、クラスパス(ClassLoader.getResourceAsStreamなど)を経由して読み込む設計にするとトラブルを回避できます。

もう一方の単独アプリケーションとしてのデプロイする手法について

EspressChartやEspressReportをJBoss上で単独のWebアプリケーション(EspressManagerなどの管理サーバ)として稼働させるためのデプロイ手順を解説します。

1.WARファイルの準備:ステップ1

Espressのインストールディレクトリ内にあるデプロイ用のWebアプリケーション構成ファイル(通常は Espress といった名前のフォルダ内に構成されています)をZIP形式で圧縮し、ファイル名の拡張子を .zip から .war に変更します(例:Espress.war)。

確認方法: 生成されたファイルの拡張子が確実に .war になっていることと、ファイルサイズが極端に小さくなく、内部に WEB-INF フォルダが含まれていることを確認します。

2.JBoss固有の設定ファイル作成(推奨):ステップ2

ブラウザからアクセスする際のURLパス(コンテキストルート)を明示的に指定するため、WARファイル内の WEB-INF/ ディレクトリ直下に jboss-web.xml というファイルを作成し、以下の内容を記述します。

XML

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
    <context-root>/espress</context-root>
</jboss-web>

確認方法: WARファイルをアーカイブツール等で再度開き、WEB-INF/jboss-web.xml が正しいXML形式で格納されていることを確認します。

3.デプロイメントディレクトリへの配置:ステップ3

作成した Espress.war ファイルを、JBossサーバ内のオートデプロイ用ディレクトリである [JBOSS_HOME]/standalone/deployments/ フォルダ内にコピー(または移動)します。

確認方法: JBossがすでに稼働中の場合、ファイルを配置した直後に同ディレクトリ内で Espress.war.isdeploying という一時ファイルが自動的に生成されることを確認します。

4.JBossの起動と動作確認:ステップ4

JBossが停止している場合は、[JBOSS_HOME]/bin/ にある起動スクリプト(Linuxの場合は standalone.sh、Windowsの場合は standalone.bat)を実行してサーバを起動します。

確認方法: JBossの起動ログにデプロイ完了のメッセージが出力され、deployments/ ディレクトリ内に Espress.war.deployed というマーカーファイルが生成されていることを確認します。その後、ブラウザから http://<サーバのIPアドレス>:8080/espress/ にアクセスし、Espressのログイン画面や管理画面が正常に表示されれば成功です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください