Cognos SDK サンプルのカスタム認証プロバイダでDB接続数増大を防ぐ修正

概要

Cognos AnalyticsのSDKで、カスタム認証プロバイダーというCognos認証をJavaプログラムで行うサンプルがあります。※カスタム認証に関しては、以下参照。
Cognos カスタム認証のセットアップ手順
https://qiita.com/shinyama/items/1f9c7842a3966233a5d7

こちらのサンプルプログラムで、認証ソースのデータベースに接続が延々と増えてしまい、Db2のメモリーが大量に消費されてしまうという問題に最近いくつか遭遇しました。

あくまでこのプログラムはサンプルとして提供しているものなので、本番環境で使うのは自己責任だよ、という前提で提供されているものなのですが、実際使われているプロジェクトは多く、同じ問題に困っているプロジェクトも多いと思いますので投稿します。

対処

QueryUtil.javaプログラムのqueryImpl()で、以下の「<-追加」の箇所を追加して、statementとresultSetをクローズする事が必要です。
connectionに関しては、プログラム中で明示的にクローズすると認証エラーになるので、明示的なクローズは行いません。
しかしながら、不要になった接続は、Cognosの組み込みのWebSphere LibertyのGCのタイミングで解放されていきます。

        while (resultSet.next()) 
                    data.add(QueryUtil.getDataRow(resultSet)); 

        statement.close();   <-追加
        resultSet.close();   <-追加

        } 
        catch (final SQLException ex) 
        { 
            throw new UnrecoverableException("SQL Exception", "An exception was caught while querying the authentication database."); 
        } 

        finally {  <-追加
                      try { if ( statement != null ) statement.close(); } catch ( Exception e ) {};  <-追加
                      try { if ( resultSet != null ) resultSet.close(); } catch ( Exception e) {}; <-追加
        }  <-追加

カスタム認証のRestorableJDBCSample及びJDBCSampleを使用される場合は、是非この記事を思い出してください。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.