このセクションでは、ライブラリのより複雑な実装を記述する場合に役立つヒントについて説明します。
- 独自のサーブレットの使用
- 機能の定義
- イベントのフローをカスタマイズする
DataTableGenerator.generateDataTable
にパラメータを渡す- 非サーブレット データソースの実装
独自のサーブレットの使用
最もシンプルなデータソース実装は、ライブラリの DataSourceServlet
クラスを継承します。DataSourceServlet
以外のクラスから継承するには、データソースを次のように実装します。
-
DataTableGenerator
インターフェースを実装し、getCapabilities()
とgenerateDataTable()
をオーバーライドします。 - サーブレットのコード内から
DataSourceHelper.executeDataSourceServletFlow()
を呼び出して、データソース フローを実行します。このメソッドは、次のパラメータを受け取ります。HttpServletRequest
オブジェクト。HttpServletResponse
オブジェクト。- 上記のステップ 1 の
DataTableGenerator
インターフェースの実装。 - 制限付きアクセスモードまたは無制限アクセスモードを指定するブール値。
たとえば、組み込み認証を提供する AuthServlet
という別のサーブレット クラスからサーブレットを継承する場合は、次のように SimpleServletExample
を書き換えて、DataSourceServlet
ではなく AuthServlet
を継承します。
-
DataTableGenerator
インターフェースを実装します。 -
generateDataTable()
をDataSourceServlet
実装からDataTableGenerator
実装に移動します。 -
DataTableGenerator
実装のgetCapabilities()
をオーバーライドして、Capabilities.None
を返します。 - サーブレット コード(
doGet()
またはdoPost()
)内からDataSourceHelper.executeDataSourceServletFlow()
を呼び出し、DataTableGenerator
の実装を渡します。このメソッドは、データソースの結果をサーブレットのレスポンスにレンダリングするなど、データソースのフロー全体を実行します。
サーブレット フレームワークを使用している場合でも、同じ手法を使用できます。サーブレット フレームワークでは、フレームワークから提供される抽象クラスを通常は継承します。たとえば、WebWork を使用している場合は、ActionSupport
クラスを継承できます。
機能の定義
データストアに大量のデータが含まれており、データソースの効率を高めたい場合は、データストアのクエリ機能を使用できます。たとえば、データストアがデータベースで、データベースに多数の列があるとします。可視化でそれらの列が少数であれば、すべての列を取得し、ライブラリのクエリ機能を使用して SELECT
を実行するよりも、データベース内で SELECT
オペレーションを実行するほうが効率的です。SELECT
機能を実装するには、データベース内で SELECT
オペレーションを実行し、データテーブルを返すコードを記述します。
Capabilities
列挙型を使用して、コードが提供するクエリ機能を定義します。使用できるオプションは次のとおりです。
NONE
: デフォルト。コードはクエリ オペレーションを提供しません。SQL
: SQL クエリ オペレーションを提供するコード。SORT_AND_PAGINATION
: コードは、並べ替えとページ分割の両方のクエリ オペレーションを提供します。SELECT
: コードで選択オペレーションが提供されます。ALL
: コードでSQL
、SORT_AND_PAGINATION
、SELECT
オペレーションが提供されます。
注: いずれの場合も、ライブラリはコードで提供されていないクエリ オペレーションを処理します。
NONE
以外の機能を実装するには、Capabilities.getCapabilities()
をオーバーライドして DataTable.generateDataTable()
を実装し、データストアにクエリを実行してデータテーブルを返します。
3 つの例(AdvancedExampleServlet
、AdvancedExampleServlet2
、SqlDataSourceServlet
)は、ケーパビリティの実装方法を示しています。すべて example
パッケージに含まれています。AdvancedExampleServlet2
については、機能とイベントのフローの定義をご覧ください。
イベントのフローをカスタマイズする
イベントのデフォルトのフローは DataSourceHelper.executeDataSourceServletFlow
で定義されています。デフォルトのフローは次のとおりです。
- クエリ パラメータを抽出して解析する。
- 制限付きアクセスモードの場合のみ、リクエストがサーブレットと同じドメインから発信されていることを確認します。
- リクエストを解析して、2 つのクエリ オブジェクト(データソース クエリと補完クエリ)を作成します。データソースのクエリを
generateDataTable()
の実装に渡します。 generateDataTable()
を実装すると、データテーブルが生成されます。- ステップ 5 で生成されたデータテーブルに対して完了クエリを実行します。
- 可視化で指定された形式でデータテーブルをレンダリングし、サーブレットのレスポンスを設定します。
独自のイベントフローを指定するには、datasource.DataSourceHelper
のヘルパー関数を呼び出します。実装例については、機能とイベントのフローの定義をご覧ください。
DataTableGenerator.generateDataTable
にパラメータを渡す
HttpServletRequest.setAttribute
を使用すると、クエリまたは HttpServletRequest
オブジェクトの一部ではないデータを DataTableGenerator.generateDataTable
に渡すことができます。コードの例を以下に示します。
サーブレットのコードで、次のように、HttpServletRequest
に渡すオブジェクトを配置します。
request.setAttribute("my_object_name", myObject); DataSourceHelper.executeDataSourceServletFlow(request, response, dataTableGenerator);
dataTableGenerator
インターフェースの実装で、次のように HttpServletRequest
からオブジェクトを取得します。
public DataTable generateDataTable(Query query, HttpServletRequest request){ Object myObject = request.getAttribute("my_object_name"); // Add your code to manipulate myObject here }
サーブレット以外のデータソースの実装
サーブレットを使用せずにライブラリを実装する場合は、サーブレット環境を必要としないクラスとヘルパー関数のみを使用できます。これには、Query
クラスと DataTable
クラスと、一部の DataSourceHelper
関数(parseQuery
、applyQuery
、validateQuery
、splitQuery
など)が含まれます。これらのクラスと関数を使用して、次のことができます。
- 可視化クエリを解析します。
- クエリをデータソース クエリと完了クエリに分割します。
- 補完クエリを実行してデータテーブルを生成します。
- データテーブルを
HTML
、CSV
、またはJSON
の形式で可視化に返します。