JDBCDebugger

JDBCDebugger


  • jdbcdebugger プロジェクト概要
    jdbcdebuggerはJDBCドライバの動作をデバッグするためのJDBCドライバです。
    既存のシステムのソースを修正することなくSQL、SQL実行時間を標準出力やファイルに出力します。

  • ダウンロード
    SourceForgeより最新バージョンをダウンロードしてください。

  • 開発の動機
    以前JDBCを利用するWEBアプリケーションを開発しました。その後SQLのパフォーマンスをチェックするために、SQLの実行ログを出力することになりました。
    が、ソースに出力処理を追加するのは構造的にかなり大変だったため、JDBCドライバを作成しログを作成することとしました。デバッグ用としてしか利用していませんが、なかなか快適です。

  • ログのサンプル
    このようなログを標準出力かファイルに出力します。

    ## JDBC Debug ## 2003/10/01 18:07:45 71ms executeQuery SELECT xxxxOID,xxxxDate FROM UserMst

    2003/10/01 18:07:45 実行日時
    71ms 応答時間+データ取得時間
    executeQuery 実行メソッド
    SELECT ... 実行SQL

  • 導入方法
    ※ver0.09からjdbcdebug.propertiesを廃止しました。
     全てJDBC URLでパラメータを指定します。
    
    (1) jdbcdebug_X.XX.jar の配置<
    
    クラスパスに jdbcdebug_X.XX.jar をコピーしてください。
    
    JNDIを利用しない場合は
    /WEB-INF/lib/jdbcdebug_X.XX.jar
    等に配置します。
    
    JNDIを利用する場合はアプリケーションサーバーのクラスパスに配置します。
    例としてTOMCATの場合は
    $TOMCAT_HOME/common/lib/jdbcdebug_X.XX.jar
    に配置します。
    
    
    (2) JDBCドライバの変更
    デバッグしたいシステムでは既に Oracle 等の
    ドライバを利用していると思われます。
    これを JDBC Debug に変更してください。
    
    例)
    
    JNDIの場合も同様にドライバの指定を変更してください。 (3) 接続URLの変更 JDBC接続URLを [実際のURL]?jdDriver=[実際のドライバ]&jdOutType=1&jdPrefix=#SQL# に変更します。 PostgreSQLの場合)
    jdbc:postgresql://129.160.48.82/FWPRJ?jdDriver=org.postgresql.Driver&jdOutType=1&jdPrefix=#SQL#
    [URLオプションについて] jdDriver 実際のJDBCドライバ。必須 jdOutType ログ出力タイプ。任意。 1:標準出力, 2:ファイル(未対応), 3:Log4J (DEBUGレベル) jdPrefix ログ接頭辞。任意 これで完了です。 後は今まで通りシステムを実行するとSQLログが 出力されます。 ※ログはSQL実行直後に出力されます。 <<<< ログフォーマット >>>>
    #SQL# 2003/10/01 18:07:18 10ms executeQuery SELECT userID FROM MstUser WHERE userName = 'aaa' 
    #SQL# 接頭辞(jdPrefixに適当な文字を与えてください) 2003/10/01 18:07:18 ログ出力日時(SQL実行直後の日時) 0ms SQL応答時間+データ取得時間(executeQuery 等のメソッド実行時間)[ms] executeQuery 実行メソッド名(execute, executeQuery, executeUpdate) SELECT 以降 実行SQL <<<< 解析クラス・メソッド >>>> java.sql.Statement, java.sql.PreparedStatement の SQL実行メソッド実行時にログを出力しています。 (java.sql.CallableStatement は解析していないので ログに出力されません。)

  • jdbcdebug_x.xx.jar モジュールの内容
    jdbcdebug_x.xx.jarは基本的に java.sql パッケージ以下のInterfaceを実装したクラス群です。
    。これらはアプリケーションとOracle等のベンダー製JDBCドライバの間で動作し、 SQL実行メソッド実行時にログを出力します。
    つまり、jdbcdebuggerはJDBCドライバをラップし、必要に応じて動作解析処理を追加しています。

    導入前
    
    
    導入後
    
    
    
    jdbcdebugger はベンダーJDBCドライバのインスタンスをjava.sqlパッケージのインターフェイス型で保持します。
    そしてコネクション、トランザクションを管理し、アプリケーションがSQL実行メソッド (executeQuery, executeUpdate) を実行すると、まず現在時刻をms単位で取得し、ベンダーのJDBCドライバにそのままSQLを渡し、SQL実行メソッド完了後の時間から応答+取得時間を計算します。そしてSQLと応答+取得時間をログに出力します。

    その他はベンダーJDBCドライバにそのまま処理をポストしています。
    デザインパターン的にはjdbcdebuggerがJDBCドライバをDelegateしていることになります。

  • サンプル
    利用するアプリケーションのサンプルです。通常のJDBCサンプルと全く同じです。 。

    import java.sql.*;
    import java.util.Properties;
    
    public class JDBCDebugTest002
    {
    
        public JDBCDebugTest002()
        {
        }
    
        public static void main(String args[])
            throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
        {
            Driver db_driver = (Driver)Class.forName("jp.co.powerbeans.jdbcdebug.sql.Driver").newInstance();
            Properties props = new Properties();
            props.put("user", "oracle"); // user name
            props.put("password", "password"); // password
            Connection c = db_driver.connect("jdbc:oracle:thin:@localhost:1521:global", props);
            PreparedStatement pst = c.prepareStatement("select * from softMst");
            ResultSet rs = pst.executeQuery();
            rs.close();
            pst.close();
            c.close();
        }
    }

  • 動作状況
    JDK1.4.0 以降対応(1.3以前は未確認)
    DBMS製品名動作
    Oracle 8.1.7, 9i
    MySQL 4.0.1以降
    PostagreSQL
    DB2
    HSQLDB

  • 要望・参加 SourceForge.jp で公開していますのでご自由に試してみてください。
    また、開発者の参加もお待ちしています。

    何か要望がありましたら気軽にメールしてください。




  • サイト名: 株式会社パワービーンズ   http://153.127.253.173
    この記事のURL:   http://153.127.253.173/modules/tinyd2/index.php?id=1