アダプタ (CongaServletAdapter) を実装することにより,ログ出力,認証済かどうかのチェックなど「ビジネスロジックではないけど,共通的な機能」を提供することができます。
まずは,アダプタの機能と実装に関するイメージをつかんでもらうため,ここでは「例外発生時のログ出力」機能を実装する方法を例として説明します。
アダプタを使うために,開発者は以下の2つを行ないます。
アダプタを作成するには,CongaServletAdapter クラスを継承したクラスを作成し,必要なメソッドの実装を行ないます。
package test; import nga.servlet.ServiceInfo; import nga.servlet.spi.CongaServletAdapter; public class ExceptionLogger extends CongaServletAdapter { public void abort(ServiceInfo serviceInfo, Throwable exception) { serviceInfo.getServlet().log("Error!", exception); } }
この例では,例外発生時のログ出力を行なうため,例外発生のタイミングで呼び出される abort メソッドをオーバーライドし,Servlet の log メソッドを呼び出しています。
メソッド引数として渡される ServiceInfo には CongaServlet インスタンス,設定ファイルのタグ情報,セッション等,CongaServlet の service メソッド実行時に利用できるあらゆる情報が格納されています。
実装したアダプタメソッドが CongaServlet 実行時に呼び出されるようにするためには,web.xml の init-param の中で,nga.servlet.adapter を定義します。
<init-param> <param-name>nga.servlet.adapter</param-name> <param-value>test.ExceptionLogger</param-value> </init-param>
ちなみに,複数のアダプタクラスを呼び出したい場合は,"test.ExceptionLogger, test.InfoLogger" というように "," で区切って記述します。
アダプタのメソッドが呼び出されるのは以下のタイミングです。
詳細は,API リファレンスをご覧下さい。