Cognos カスタム認証(JDBCSample)のOracle版

#Cognos カスタム認証(JDBCSample)について
Cognos SDKで認証機能を実装するカスタム認証(JDBCSample)については、こちらの記事をご参照ください。
**Cognos SDK でカスタム認証プロバイダーを開発する時に参考になるJDBCSampleの説明**
https://qiita.com/shinyama/items/33b6349916380b8fe960

このサンプルとして提供されているJDBCSampleですが、ユーザー情報を保持するデータベースはDb2とSQL Serverのみで、Oracleをソースとしてやってみるとエラーとなり動きません。

とはいえ、全社的にOracleを標準データベースとしているお客様環境は多々あり、Cognosのカスタム認証でもOracleを使用してもらわないと困る、という事があります。

Oracleでカスタム認証が動くように修正しましたので、修正箇所を共有します。
ただし、個人的に動くものを作ったというだけですので、これが正式なものではなく、不具合があってもサポートされるものではないので、あくまで参考としてご活用ください。

#Oracle用テーブル定義
**USERS表**
varchar2に統一しています

```html
create table USERS (
        USERID                  varchar2(8) not null ,
        USERNAME                varchar2(255) not null ,
        PASSWORD                varchar2(255) not null ,
        FULLNAME                varchar2(255) ,
        EMAIL                   varchar2(255) ,
        LOCALE                  varchar2(5) ,
        TENANT                  varchar2(128)
);

alter table USERS add constraint PK_USERS primary key (USERID);
```

**GROUPS表**
varchar2に統一しています

```html
create table GROUPS (
        GROUPID                 varchar2(8) not null,
        GROUPNAME               varchar2(255) NOT NULL,
        USERID                  varchar2(8),
        TENANT                  varchar2(128) not null
);
```

**OBJECTVIEWビュー**
変更なし

#Javaソース
すいません、以下のサンプルとのdiff結果で読み取って下さい。
基本はテーブル定義のintegerをvarchar2に変更した対応です。
比較対象の.org拡張子のファイルが、Db2&SQL Server版のデフォルトサンプルです。

**AccountCache.java**

```html
# diff AccountCache.java AccountCache.java.org
43,44c43,44
<               final String userID = account.getObjectID().substring(2);
< //            final Integer userID = Integer.parseInt(userIDStr.substring(2));
---
>               final String userIDStr = account.getObjectID();
>               final Integer userID = Integer.parseInt(userIDStr.substring(2));
```

**GroupCache.java**

```html
# diff GroupCache.java GroupCache.java.org
45,46c45,46
<               final String groupID = group.getObjectID().substring(2);
< //            final Integer groupID = Integer.parseInt(groupIDStr.substring(2));
---
>               final String groupIDStr = group.getObjectID();
>               final Integer groupID = Integer.parseInt(groupIDStr.substring(2));
```

**QueryUtil.java**

```html
# diff QueryUtil.java QueryUtil.java.org
10d9
< import java.math.BigDecimal;
137c136
<                       return (String) row[0];
---
>                       return String.valueOf(row[0]);
383,384c382,383
<                               final boolean bIsUser = ((BigDecimal) row[isUserCol]).intValue() == 1;
<                               final boolean bIsGroup = ((BigDecimal) row[isGroupCol]).intValue() == 1;
---
>                               final boolean bIsUser = ((Integer) row[isUserCol]).intValue() == 1;
>                               final boolean bIsGroup = ((Integer) row[isGroupCol]).intValue() == 1;
410c409
<                               final String objectID = (String) row[0];
---
>                               final String objectID = String.valueOf(row[0]);
452c451
<                       final String groupID = (String) row[0];
---
>                       final String groupID = String.valueOf(row[0]);
```

#JDBC_Config_Restorable.properties ファイル

```html
# For Oracle connections
connectionString=jdbc:oracle:thin:@OracleHost:1521:ORCL
driverClass=oracle.jdbc.driver.OracleDriver
username=orauser
password=password
singleSignon=true
```