WLS(WebLogic)からAutonomous Database(ATP/ADW)に接続するデータソース(コネクションプール)を作成してみる。

※(2019/7/4追記) 本記事は単体のWLS(WebLogic)からAutonomous Databaseに接続するデータソースを作成する記事として修正しました。

WLS(WebLogic)からAutonomous Databaseに接続するデータソース(コネクションプール)を作成してみるやで彡(ﾟ)(ﾟ)

ポイントは幾つかあって

- (推奨)最新バージョンの JDBC Driver(Full版)をWLSのOS上に格納(※上書きはしない)して、各種jarのCLASSPATHを通す。
- (必須)Autonomous Database のウォレットをWLSのOS上に格納する。
- (必須)ウォレットの格納場所を何かしらの手段で指定する。 ※今回はTNS_ADMINをJDBC URLに指定

と云ったところです。

# 1. JDBC Driver 19.3 Full版のダウンロード

2019年6月15日現在、Oracle Database JDBC Driver の最新バージョンは 19c(19.3)ですが、
随時更新されるので必ず最新バージョン有無を確認した上で使用して下さい。

> Oracle Database 19c (19.3) JDBC Driver & UCP Downloads
> https://www.oracle.com/technetwork/database/application-development/jdbc/downloads/jdbc-ucp-19c-5460552.html

幾つか種類が有りますが、WLS12.2.1.3のJDK8に対応した「ojdbc8-full.tar.gz」をダウンロードします。

# 2. JDBC Driver 19.3 Full版をWLSのOSに格納＆展開

ダウンロードした ojdbc8-full.tar.gz を WLS(WebLogic) の OS に格納して展開します。
WLS(WebLogic)の起動ユーザーからアクセス可能なディレクトリ/owner/group/permissionとします。

今回はディレクトリ/u01/app/oracle/tools/home/oracle/work に JDBC Driver を展開します。

```shell
su - oracle
/u01/app/oracle/tools/home/oracle
mkdir work
cd work
cp -p 
cp -p /tmp/ojdbc8-full.tar.gz ./
tar xvzf ./ojdbc8-full.tar.gz
```

/u01/app/oracle/tools/home/oracle/work/ojdbc8-full配下に各種jarファイルが展開されます。

```shell
$ pwd
/u01/app/oracle/tools/home/oracle/work/ojdbc8-full
$ ls -la
total 8644
drwxr-x---. 2 oracle oracle    4096 Apr 29 22:16 .
drwxr-x---. 3 oracle oracle    4096 Jun 15 02:39 ..
-r--r-----. 1 oracle oracle 4210517 Apr 24 21:07 ojdbc8.jar
-r-xr-x---. 1 oracle oracle   11596 Apr 24 21:07 ojdbc.policy
-r--r-----. 1 oracle oracle  144681 Apr 24 21:07 ons.jar
-r--r-----. 1 oracle oracle  306004 Apr 24 21:07 oraclepki.jar
-r--r-----. 1 oracle oracle 1661488 Apr 24 21:07 orai18n.jar
-r--r-----. 1 oracle oracle  205154 Apr 24 21:07 osdt_cert.jar
-r--r-----. 1 oracle oracle  306854 Apr 24 21:07 osdt_core.jar
-rw-r-----. 1 oracle oracle    2592 Apr 29 22:16 README.txt
-r-xr-x---. 1 oracle oracle   29205 Apr 24 21:07 simplefan.jar
-r--r-----. 1 oracle oracle 1680074 Apr 24 21:07 ucp.jar
-r--r-----. 1 oracle oracle  262664 Apr 24 21:07 xdb.jar
```

# 3. Autonomous DatabaseのWalletファイルをダウンロードして展開

Autonomous DatabaseのWalletファイルについては下記らへんをご参照彡(ﾟ)(ﾟ)

> クライアント資格証明(ウォレット)のダウンロード
> https://docs.oracle.com/cd/E83857_01/paas/atp-cloud/atpug/connect-download-wallet.html#GUID-B06202D2-0597-41AA-9481-3B174F75D4B1
> 
> Python (cx_Oracle) から２つ目のAutonomous Database (ADWやATP）に接続してみる
> https://qiita.com/mikika/items/5d157c2fcdd80d560bd4
> 
> TableauをOracle Autonomous に繋げてみた
> https://qiita.com/daisuke_high_185/items/fca12ae6fbc4c526f821

ダウンロードした Walletを を WLS の OS に格納して展開します。
やはりWLSの起動ユーザーからアクセス可能なディレクトリ／各種権限とします。

今回は /u01/app/oracle/tools/home/oracle/work/wallet に展開します。

```shell
su - oracle
cd /u01/app/oracle/tools/home/oracle/work
mkdir wallet
cd wallet
cp -p /tmp/Wallet_DB201906031608.zip ./
unzip Wallet_DB201906031608.zip
```

/u01/app/oracle/tools/home/oracle/work/wallet配下に各種ファイルが展開されます。

```shell
$ pwd
/u01/app/oracle/tools/home/oracle/work/wallet
$ ls -la
total 68
drwxr-x---. 2 oracle oracle  4096 Jun 15 02:54 .
drwxr-x---. 4 oracle oracle  4096 Jun 15 02:53 ..
-rw-r-----. 1 oracle oracle  6661 Jun 15 02:53 cwallet.sso
-rw-r-----. 1 oracle oracle  6616 Jun 15 02:53 ewallet.p12
-rw-r-----. 1 oracle oracle  3242 Jun 15 02:53 keystore.jks
-rw-r-----. 1 oracle oracle    87 Jun 15 02:53 ojdbc.properties
-rw-r-----. 1 oracle oracle   114 Jun 15 02:53 sqlnet.ora
-rw-r-----. 1 oracle oracle  5638 Jun 15 02:53 tnsnames.ora
-rw-r-----. 1 oracle oracle  3336 Jun 15 02:53 truststore.jks
-rw-rw-r--. 1 oracle oracle 19912 Jun 15 02:53 Wallet_DB201906031608.zip
$
```

# 4. WLS(WebLogic)起動シェルの編集(CLASSPATHの指定)

WLS(WebLogic)の起動シェルを編集して、JDBC Driverの各種jarをCLASSPATHに通します。
/<任意のディレクトリ>/domains/＜ドメイン名＞/bin配下のsetDomainEnv.shを編集します。

setDomainEnv.shの下記部分に……彡(ﾟ)(ﾟ)

```shell
：
# ADD EXTENSIONS TO CLASSPATHS

if [ "${EXT_PRE_CLASSPATH}" != "" ] ; then
        if [ "${PRE_CLASSPATH}" != "" ] ; then
                PRE_CLASSPATH="${EXT_PRE_CLASSPATH}${CLASSPATHSEP}${PRE_CLASSPATH}"
                export PRE_CLASSPATH
        else
：
```

下記(EXT_PRE_CLASSPATH)を追記して JDBC Driver の 各種jar を指定します。

```shell
：
# ADD EXTENSIONS TO CLASSPATHS

EXT_PRE_CLASSPATH="/u01/app/oracle/tools/home/oracle/work/ojdbc8-full/ojdbc8.jar:/u01/app/oracle/tools/home/oracle/work/ojdbc8-full/ucp.jar:/u01/app/oracle/tools/home/oracle/work/ojdbc8-full/oraclepki.jar:/u01/app/oracle/tools/home/oracle/work/ojdbc8-full/osdt_core.jar:/u01/app/oracle/tools/home/oracle/work/ojdbc8-full/osdt_cert.jar:";
export EXT_PRE_CLASSPATH

if [ "${EXT_PRE_CLASSPATH}" != "" ] ; then
        if [ "${PRE_CLASSPATH}" != "" ] ; then
                PRE_CLASSPATH="${EXT_PRE_CLASSPATH}${CLASSPATHSEP}${PRE_CLASSPATH}"
                export PRE_CLASSPATH
        else
：
```

WLSを停止／起動してjavaプロセスのCLASSPATHをjinfoコマンドで確認。上手く行ってますやね彡(^)(^)

```shell
jinfo 5748 | grep -i java.class.path
java.class.path = /u01/app/oracle/tools/home/oracle/work/ojdbc8-full/ojdbc8.jar:/u01/app/oracle/tools/home/oracle/work/ojdbc8-full/ucp.jar:/u01/app/oracle/tools/home/oracle/work/ojdbc8-full/oraclepki.jar:/u01/app/oracle/tools/home/oracle/work/ojdbc8-full/osdt_core.jar:/u01/app/oracle/tools/home/oracle/work/ojdbc8-full/osdt_cert.jar:/u01/app/oracle/middleware/oracle_common/modules/features/com.oracle.db.jdbc7-dms.jar:/u01/jdk/lib/tools.jar:/u01/app/oracle/middleware/wlserver/server/lib/weblogic.jar:/u01/app/oracle/middleware/wlserver/../oracle_common/modules/thirdparty/ant-contrib-1.0b3.jar:/u01/app/oracle/middleware/wlserver/modules/features/oracle.wls.common.nodemanager.jar:/u01/app/oracle/middleware/oracle_common/modules/oracle.jps/jps-manifest.jar:/u01/app/oracle/middleware/oracle_common/modules/internal/features/jrf_wlsFmw_oracle.jrf.wls.classpath.jar:/u01/app/oracle/middleware/wlserver/common/derby/lib/derbyclient.jar:/u01/app/oracle/middleware/wlserver/common/derby/lib/derby.jar:/u01/jdk/lib/tools.jar:/u01/app/oracle/middleware/oracle_common/modules/oracle.jps/jps-manifest.jar
```

# 5. WLS(WebLogic)の管理コンソールからデータソースを作成

WebLogic管理コンソールにログインします。
![JCS001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/d9041107-d3f8-3d18-2026-dbc100474559.jpeg)


左上の「ロックして編集」をクリックして……
![JCS002.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/7e342543-67f2-c2b0-20e9-40819ae072e7.jpeg)


「GridLink for RACデータソースの構成」のリンクをクリック
![JCS003.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/d902180a-e9b9-1644-d8fe-3604fb855d43.jpeg)


「新規」⇒「GridLinkデータ・ソース」
![JCS004.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/484ce5f1-ea6c-d9d0-1cf1-59f529b8c9b9.jpeg)


「名前」⇒任意の文字列、「スコープ」⇒グローバル、「JNDI名」⇒任意の文字列、「データベース・ドライバ」⇒Oracles Driver(thin) for GridLink Connections;
![JCS005.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/656501e5-e210-d4b8-6406-a141dde1d4d5.jpeg)


「1フェーズ・コミット」以外のチェックは全て無し
![JCS006.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/faf10a4a-4759-9df9-9335-4e7bdf5def80.jpeg)


「完全なJDBC URLの入力」をチェック
![JCS007.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/ce872d48-1e90-2574-8e81-f717c784650a.jpeg)


「完全なJDBC URL」はjdbc:oracle:thin:@＜tnsnames.oraの接続文字列＞?TNS_ADMIN=＜Autonomous DatabaseのWalletを配置したディレクトリ＞を指定します。今回はATPのTPサービスに接続します。

```shell
jdbc:oracle:thin:@db201906031608_tp?TNS_ADMIN=/u01/app/oracle/tools/home/oracle/work/wallet
```
「データベース・ユーザー名」はAutonomous Databaseのユーザー名、「パスワード」はAutonomous Databaseユーザーのパスワード、「プロトコル」はTCP、oracle.jdbc.DRCPConnectionClassは無し
![JCS008.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/09dc1a9b-4ab3-4066-fd42-045e46df8028.jpeg)


次画面で「すべてのリスナーのテスト」を実行すると、接続テストが成功。やったぜ。彡(^)(^)
![JCS011.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/3c265ebd-0e60-b876-7715-8a1e0de279b8.jpeg)


今回はFAN/ONS関連の設定は無し。
![JCS012.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/de70d2a7-8805-cd4a-3803-9e47b89ff8e7.jpeg)


データソースをデプロイするWLSクラスタを選択して、終了
![JCS014.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/c115954a-3c78-9047-4988-5bb2f1a84e32.jpeg)


「変更のアクティブ化」を押して完了です。
![JCS015.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/0ff77209-0700-9820-088f-676abedb9f8c.jpeg)

# 6. まとめ

基本は以前の記事と同様や！彡(ﾟ)(ﾟ)

> Autonomous DB(ADW/ATP) に Java の JDBC Thin Driver で接続してみる。(OCI, Oracle Cloud Infrastructure)
> https://qiita.com/ora_gonsuke777/items/91ec0e15848a78ede385

WLS(WebLogic)やAutonomous Databaseをどんどん活用してやで彡(^)(^)


# 7. 参考ドキュメント(※2019/06/17追記)

> JDBC ThinドライバでのJDBC URL接続文字列の使用
> https://docs.oracle.com/cd/E83857_01/paas/atp-cloud/atpug/connect-jdbc-thin-wallet.html#GUID-F1D7452F-5E67-4418-B16B-B6A7B92F26A4
> 　　
> JDBC 18.3を使用したOracle Autonomous DatabaseとJavaの接続性（Oracle ATPまたはOracle ADW）
> https://www.oracle.com/technetwork/jp/database/application-development/jdbc/documentation/atp-5073445-ja.html
> 　　
> WebLogic Server 10.3.6-12c に同梱された UCP と JDBC ドライバをアップグレードする方法 (ドキュメントID 2005250.1) ※要ログイン  
> https://support.oracle.com/epmos/faces/DocumentDisplay?id=2005250.1  
> 　　
> Starting With Oracle JDBC Drivers - Installation, Certification, and More! (Document ID 401934.1) ※要ログイン
> https://support.oracle.com/epmos/faces/DocumentDisplay?id=401934.1