Seasar DI Container with AOP

OracleのUnicode問題

OracleのJDBC Driverは、Unicodeのマッピングに一部問題があり、~が化けてしまいます。この問題に対処するには、jdbc.diconのResultSetFactoryの設定を変更します。通常は下記のようになっています。

<component class="org.seasar.extension.jdbc.impl.BasicResultSetFactory"/>
<!--
<component class="org.seasar.extension.jdbc.impl.OracleResultSetFactory"/>
-->

BasicResultSetFactoryの部分をコメントアウトし、かわりに直ぐ下のOracleResultSetFactoryの部分のコメントをはずし有効にします。

<!--
<component class="org.seasar.extension.jdbc.impl.BasicResultSetFactory"/>
-->
<component class="org.seasar.extension.jdbc.impl.OracleResultSetFactory"/>

Booleanの扱い

Oracleのようにboolean型に対応していないRDBMSもあります。この問題に対処するには、jdbc.diconのStatementFactoryの設定を変更します。通常は下記のようになっています。

<component class="org.seasar.extension.jdbc.impl.ConfigurableStatementFactory">
  <arg>
    <component class="org.seasar.extension.jdbc.impl.BasicStatementFactory"/>
    <!--
    <component class="org.seasar.extension.jdbc.impl.BooleanToIntStatementFactory"/>
    -->
    ...
  </arg>
</component>

BasicStatementFactoryの部分をコメントアウトし、かわりにBooleanToIntStatementFactoryの部分のコメントをはずし有効にします。

<component class="org.seasar.extension.jdbc.impl.ConfigurableStatementFactory">
  <arg>
    <!--
    <component class="org.seasar.extension.jdbc.impl.BasicStatementFactory"/>
    -->
    <component class="org.seasar.extension.jdbc.impl.BooleanToIntStatementFactory"/>
    ...
  </arg>
</component>

SQLのログの取得

S2JDBCで実行したSQLはログとして記録されるためアプリケーションから参照することが可能です。 SQLのログはorg.seasar.extension.jdbc.SqlRegistryのインスタンスから取得します。

SqlRegistryのインスタンスはDIもしくはルックアップにより取得できます。

DIのための設定は次のようになります。

<component name="sqlLogRegistry" class="org.seasar.extension.jdbc.SqlLogRegistry">
  @org.seasar.extension.jdbc.SqlLogRegistryLocator@getInstance()
</component>

プログラムから直接ルックアップする場合は次のようなコードが必要です。

SqlLogRegistry sqlLogRegistry = SqlLogRegistryLocator.getInstance();
SqlRegistryのインスタンスは複数のログを保持しています(デフォルトでは最新3つのログを保持します)。 最新の(最後に実行された)SQLのログは次のようなコードで取得できます。
SqlLog sqlLog = sqlLogRegistry.getLast();
org.seasar.extension.jdbc.SqlLogのインスタンスは次の情報を保持しています。
  • 未加工のSQL
  • バインド変数を実際の値で置き換えた完全なSQL
  • SQLにバインドされる値の配列
  • SQLにバインドされる値の型の配列