Webアプリケーション作成
JDBCデータソースを作成してアタッチしたManaged Serverを起動すればDBに対してにどのような接続を確認することは可能です。ただしデータソースがどのDBインスタンスにリクエストを振り分けているか、つまりロードバランシングの状況を確認することはできません。これを確認するためにはデータソースを介してDBにリクエストを投入するWebアプリケーションが必要です。
具体的にどんなアプリかといえば至ってシンプル、コールされたらリクエスト投入先のDBインスタンスの V$INSTANCEからインスタンス名を引っ張ってくるだけの代物です。
もっとも私のjavaスキルの集大成は”Hello World”といったところなので、たったそれだけのアプリでも自力で作るのはまず不可能。ネットで公開されている利用可能な情報を集めてそれで何とかしてみようと思います。
ということで、まずはアプリ開発用環境の構築から。ちなみに私のPCのOSはWindows 10 Homeエディションです。
アプリ開発用環境の構築
Oracle DB
Oracle DBへの接続を前提としたアプリ開発なので当然、PCからアクセスできるDBが必要です。
一番手っ取り早い方法は本番DBの Grid Infrastructur管理対象ネットワークに本番サイトの管理ネットワークを追加してそれ用のVIPやリスナーを構成するか、スタティックなDB接続を定義したRAC管理外のリスナーをどこかのノードに作成することです。しかしアプリ開発に本番用DBをそのまま使用するのはさすがちょっとどうなのよ、ということで新規に開発用DBを用意します。
このDBは極論すればただ動けばOK、OSはなんでもいいので手っ取り早くWindows Server2022で仮想マシンを作成してそこにOracle 21cをインストールします(PCはメモリ8GBしか積んでいないのでOracleインストールはちょっとムリ)。
【インストールメディア入手】
インストール対象 | URL | メディア名 |
Windows Server 2022 | https://info.microsoft.com/ww-landing-windows-server-2022.html?lcid=ja | SERVER_EVAL_x64FRE_ja-jp.iso |
Oracle Database Enterprise Edition 21cWindows版 | https://www.oracle.com/jp/database/technologies/oracle-database-software-downloads.html#db_ee Oracle Database 21c for Linux x86-64 | WINDOWS.X64_213000_db_home.zip |
【仮想マシン作成】
作成画面 | 設定値 |
名前とゲスト OS の選択 | 名前:win2022sv 互換性:ESXi6.5 仮想マシン ゲスト OS ファミリ:Windows ゲスト OS のバージョン:MicroSoft Windows Server 2016以降(64bit) |
設定のカスタマイズ | CPU:2 メモリ:4096 MB ハード ディスク 1:100 GB ディスク プロビジョニング:シン プロビジョニング ネットワーク アダプタ 1:Global Network CD/DVD ドライブ 1:データストアISOファイル CD/DVD メディア: <データストア>/SERVER_EVAL_x64FRE_ja-jp.iso |
仮想マシンを起動してOSをインストールします。Windows 2022 Serverのインストールはエディショに「Windows Server 2022 Datacenter Evaluation」を選択して管理者パスワードを指定したらあとはすべてデフォルトの設定でOKです。OSインストール後は以下の手順で環境設定を実行します。
【環境設定】
No. | 設定項目 | 操作 / 設定内容 |
1 | VMWareツールのインストール | ①ESXiコンソールで「仮想マシン」-「win2022sv」右クリック- 「ゲストOS」-「VMWare Toolsのインストール」 ②DVDドライブ (D)VMWare Tools 直下のsetup64を実行 ③すべてデフォルト設定でVMWare Toolsをインストール (再起動メッセージが表示されたら「はい」で再起動) |
2 | ネットワーク | 「スタート(右クリック)」 -「設定」-「ネットワークとインターネット」-「ネットワークと共有センター」-「アダプター設定の変更」-「Ehernet0(右クリック)」-「プロパティ」 ①「インターネットプロトコル バージョン6」:チェックオフ ②「インターネットプロトコル バージョン4」-「プロパティ」 次のIPアドレスを使う IPアドレス:192.168.11.210 サブネットマスク:255.255.255.0 デフォルトゲートワイ:192.168.11.1 |
3 | ファイアーウォール無効化 | 「スタート」-「サーバーマネージャー」-「ローカルサーバー」-「…ファイアウォール パブリック/有効」-「パブリック ネットワーク」 Microsoft Datacenterファイアウォール:オフ |
4 | リモートデスクトップ接続有効化 | 「スタート」-「サーバーマネージャー」-「ローカルサーバー」-「…リモートデスクトップ 無効」 「このコンピュータへのリモート接続を許可する」を選択 |
5 | インストールディレクトリ作成 | エクスプローラにて以下のフォルダを作成 C:\app\oracle\product\21c\dbhome_1 |
6 | イメージファイル配置 | PCからwin2022svにリモートデスクトップ接続、C:\app\oracle\product\21c\dbhome_1にWINDOWS.X64_213000_db_home.zipを配置 |
7 | イメージファイル展開 | WINDOWS.X64_213000_db_home.zipをC:\app\oracle\product\21c\dbhome_1に展開 |
Oracle DBインストール、DB構築、インストール事後作業、OracleNetサービス設定を実施します。各作業の内容は以下の通り。
【Oracle DBインストール】
No. | 画面 | 操作 / 設定 |
1 | – | C:\app\oracle\product\21c\dbhome_1のsetup.exeをダブルクリックしてインストーラを起動 |
2 | 構成オプションの選択 | 「ソフトウェアのみ」を選択 |
3 | データベース・インストール・オプションの選択 | 「単一インスタンス・データベースのインストール」を選択 |
4 | データベース・エディションの選択 | 「Enterprise Edition」を選択 |
5 | Oracleホーム・ユーザーの指定 | 「仮想アカウントの使用」を選択 |
6 | インストール場所の指定 | Oracleベース:C:\app\oracle |
7 | サマリー | 「インストール」をクリック |
8 | 製品のインストール | エラーが表示されないことを確認 |
9 | 終了 | 「Oracleデータベースの登録が成功しました。」のメッセージを確認して「閉じる」 |
【DB作成】
No. | 画面 | 操作 / 設定 |
1 | – | 「スタート」-「Oracle-OraDB21Home1」-「Database Configuration Assistant」をクリックしてDBCAを起動 |
2 | データベース操作の選択 | 「データベースの作成」を選択 |
3 | 操作モード | 「拡張構成」を選択 |
4 | データベース・デプロイメント・タイプの選択 | 「カスタム・データベース」を選択 |
5 | データベースIDの詳細の指定 | グローバル・データベース名:prdb SID:prdb PDB名:prpdb |
6 | データベース記憶域・オプションの選択 | 「データベース記憶域属性に次を使用」を選択 ※設定値はデフォルトのままでOK |
7 | 高速リカバリ・オプションの選択 | すべてチェックなし |
8 | ネットワーク構成詳細の指定 | 「新規リスナーの作成」チェック リスナー名:LISTENER リスナー・ポート:1521 |
9 | データベース・オプションの選択 | すべてチェックなし |
10 | 構成オプションの指定 | 「自動共有メモリー管理を使用」を選択 ※設定値はデフォルトのままでOK |
11 | 管理オプションの指定 | すべてチェックなし |
12 | データベース・ユーザー資格証明の指定 | 「すべてのアカウントに同じ管理パスワードを使用」を選択 |
13 | データベース作成オプションの選択 | 「データベースの作成」にチェック |
14 | サマリー | 内容に誤りがないことを確認して「終了」をクリック |
15 | 進行状況ページ | エラーが出力されないことを確認 |
16 | 終了 | 「データベースの作成が完了しました」のメッセージが表示されていることを確認して「閉じる」をクリック |
【事後作業】
No. | 設定項目 | 操作 / 設定内容 |
1 | 接続確認 | コマンドプロンプトを起動して以下を入力、DBに接続できることを確認 sqlplus / as sysdba |
2 | PDB起動/停止確認 | sqlplus上で以下のコマンドを実行 ————————————————– — PDBの状態確認 show pdbs — > PRPDB OPEN MODE — ”READ WRITE”の場合はPDB起動 — ”MOUNTED”の場合はPDB停止 — PDB起動確認(PRPDBが停止している場合のみ) alter pluggable database PRPDB open; show pdbs — > PRPDBの OPEN MODEが”READ WRITE”となったことを確認 |
3 | oracleアカウント作成 | sqlplus上で以下のコマンドを実行 ————————————————– — 現在接続しているコンテナをPRPDBに移動 alter session set container = PRPDB; — DEFAULTプロファイルのパスワード有効期限を無期限に設定 alter profile DEFAULT limit PASSWORD_LIFE_TIME UNLIMITED; — PDBUSERアカウント作成 create user PDBUSER identified by <PDBユーザのパスワード> default tablespace users temporary tablespace temp; — 権限設定 grant CREATE SESSION,RESOURCE,SELECT_CATALOG_ROLE to PDBUSER; |
4 | PDB自動起動設定 | sqlplus上で以下のコマンドを実行 ————————————————– — CDBの再起動時のPDBオープン・モードを保持 alter pluggable database PRPDB save state; |
【OracleNetサービス設定】
No. | 画面 | 操作 / 設定 |
1 | – | 「スタート」-「Oracle-OraDB21Home1」-「Net Configuration Assistant」をクリックしてNETCAを起動 |
2 | ようこそ | 「ローカル・ネット・サービス名構成(S)」を選択 |
3 | ネット・サービス名の構成 | 「追加」を選択 |
4 | ネット・サービス名の構成 – サービス名 | サービス名(S):PRPDB |
5 | ネット・サービス名の構成 – プロトコルの選択 | 「TCP」を選択 |
6 | ネット・サービス名の構成 – TCP/IPプロトコル | ホスト名(H):192.168.11.210 「標準ポート番号の1521を使用」を選択 |
7 | ネット・サービス名の構成 – テスト | 「はい、テストを実行します(Y)」を選択 |
8 | ネット・サービス名の構成 – 接続 | ①ログインの変更をクリック ②以下を入力して「OK」をクリック ユーザ名(Y):PDBUSER パスワード(P):<PDBユーザのパスワード> ③「接続中…テストは成功しました」のメッセージが表示されることを確認 |
9 | ネット・サービス名の構成 – ネット・サービス名 | ネット・サービス名(S):PRPDB |
10 | ネット・サービス名の構成 – 別のネット・サービス名 | 「いいえ(O)」を選択 |
11 | ネットわーびす名の構成が終了しました~ようこそ | 「次へ」→「終了」 |
Oracle Instant Client
今回のWebアプリ作成にOracleクライアントは使用しませんが、JDBC接続がうまくいかないときの原因調査なんかで無いよりはあった方が何かと便利です。なのでPCにOracle Instant ClientのインストールとDBへの接続確認だけやっておきます。
【インストールメディア入手】
インストール対象 | URL | メディア名 |
Oracle Instant Client Version 21.18.0.0.0 | Microsoft Windows(x64)64ビット用Oracle Instant Client | Oracle 日本 | ●Basic Package instantclient-basic-windows.x64-21.18.0.0.0dbru.zip ●SQL*Plus Package instantclient-sqlplus-windows.x64-21.18.0.0.0dbru.zip |
【設定手順】
No. | 設定 | 操作 / 設定 |
1 | Oracle Instant Client BASE ZIPファイル展開 | instantclient-basic-…dbru.zipをC:\Oracleに展開 |
2 | Oracle Instant Client sqlplus ZIPファイル展開 | instantclient-sqlplus-…dbru.zipをC:\Oracleに展開 → 重複ファイルは上書きせずスキップを選択 |
3 | 環境変数設定 | ①「スタート」右クリック – 「設定」 → 設定画面を起動(Windows10の場合) ② 設定画面左下「詳細設定」- 設定画面右側「システムの詳細設定」 → システムのプロパティ・ダイアログボックスを起動 ③ 詳細設定タブ「環境変数」クリック → 環境変数ダイアログボックス表示 ④ ユーザ環境変数Pathに以下を追加 C:\oracle\instantclient_21_18 ⑥ 以下のユーザ環境変数を追加 変数名(N):NLS_LANG 変数値(V):Japanese_Japan.JA16SJIS |
4 | Oracle Netサービス設定 | アプリ開発用DBサーバの tnsnames.ora をリモートデスクトップ経由でPCにコピー —————————- ●コピー元フォルダ C:\app\oracle\homes\OraDB21Home1\network\admin\ ●コピー先フォルダ C:\oracle\instantclient_21_18\network\admin |
5 | sqlplus接続確認 | コマンドプロンプトを起動、以下のコマンドでDBに接続確認 sqlplus pdbuser/<PDBユーザのパスワード>@prpdb |
WebLogic
アプリ開発用のWebLogic Serverはそれほどリソースを必要としないのでPCにインストールします。
WebLogic Sever14.1.2のインストールに必要なOracle JDKバージョンは「17.0.12+、21.0.4+」、APサーバのJDKは21.0.7なのでWindows版のJDK21インストーラをOTNからダウンロードします。
【JDKダウンロードURL】
ダウンロードが完了したらダブルクリックでインストーラを起動します。途中で何か聞かれても全部デフォルトのままでOKです。
JDK21のインストール完了後、コマンドプロンプトを立ち上げて”java -version”で正しいバージョンが返されることを確認します。
【PCのコマンドプロンプトで実行】
-----------------------------------------------------------------------------
java -version
-----------------------------------------------------------------------------
【実行結果】
-----------------------------------------------------------------------------
Microsoft Windows [Version 10.0.19045.6093]
(c) Microsoft Corporation. All rights reserved.
C:\Users\arai>java -version
java version "21.0.7" 2025-04-15 LTS
Java(TM) SE Runtime Environment (build 21.0.7+8-LTS-245)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.7+8-LTS-245, mixed mode, sharing)
C:\Users\arai>
ユーザ環境変数にJAVA_HOMEを追加します。
【JAVA_HOME環境変数】
設定項目 | 設定値 |
変数名(N) | JAVA_HOME |
変数値(V) | C:\Program Files\Java\jdk-21 |
JDKの次はWebLogicのインストールです。
OTNのWebLogicダウンロードページから遷移するOracle Software Delivery Cloudではプラットフォームを指定する箇所がありますがLinux、Windowsのどちらを指定してもファイルの中身は同じです。なのでAPサーバ構築時にダウンロードしたインストーラをそのまま使用します。
WebLogicインストーラのダウンロード・ファイル(V1045131-01.zip)を右クリック、「すべて展開(T)」をクリックして任意のフォルダに展開します。
管理者としてコマンドプロンプトを立ち上げ、以下のコマンドでWebLogicインストーラを起動します。
【PCのコマンドプロンプト(管理者として起動)で実行】
-----------------------------------------------------------------------------
cd <V1045131-01.zipの展開ディレクトリ>
java -jar fmw_14.1.2.0.0_wls.jar
インストーラの操作手順は以下の通りです。
【WebLogicインストーラ操作手順】
No. | 画面 | 操作 / 設定 |
1 | ようこそ | 「次へ(N)」 |
2 | 自動更新 | 「自動更新をスキップ(A)」を選択 |
3 | インストール場所 | Oracleホーム(O):C:\Oracle\Middleware\Oracle_Home |
4 | インストール・タイプ | 「WebLogic Server」を選択 |
5 | 前提条件のチェック | エラーが出ていないことを確認して「次へ(N)」 |
6 | インストール・サマリー | 指定内容に誤りがないことを確認して「インストール(I)」 |
7 | インストールの進行状況 | エラーが出力されず最後までインストールが進んだら「次へ(N)」 |
8 | インストール完了 | インストール正常完了メッセージが表示されていることを確認、「終了(E)」クリック |
インストールが完了すると構成ウィザードが自動起動してドメイン作成に移ります。開発専用なのでドメインにはAdminServerのみ作成します。
【ドメイン作成】
No. | 画面 | 操作 / 設定 |
1 | ドメインの作成 | 「新規ドメインの作成(C)」を選択 |
2 | テンプレート | 「製品テンプレートを使用してドメインを作成(P)」を選択 |
3 | 管理者アカウント | 名前:weblogic パスワード:<管理者アカウントのパスワード> パスワードの確認:<管理者アカウントのパスワード> |
4 | ドメイン及びJDK | ドメインモード 「開発モード(D)」を選択 ドメインのデフォルト・ポートの有効化または無効化 「リスニング・ポート(非SSLポート)の有効化(E)」のみチェック JDK 「Oracle HotSpot 21.0.7 C:\PROGRA^1\Java\jdk-21」を選択 |
5 | 各聴講生 | 「管理サーバ(A)」のみチェック |
6 | 管理サーバ | サーバ名:AdminServer リスニング・アドレス:<PCのIPアドレス>を選択 管理サーバの構成 「リスニング・ポートの用う効果」にチェック リスニング・ポート:7001 |
7 | 構成のサマリー | 構成内容に問題がなければ「作成(C)」クリック |
8 | 構成の進行状況 | エラーが出力されず最後まで構成が進んだら「次へ(N)」 |
9 | 構成の終了 | ドメイン構成の正常終了メッセージを確認して「終了(F)」 |
ドメインの作成が終わったら以下のファイルをダブルクリックするか、コマンドプロンプトから実行してAdmin Serverを起動します。
C:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\bin\startWebLogic.cmd
コマンドプロンプト画面に標準出力メッセージが流れ、最後に「<サーバー状態がRUNNINGに変化しました。>」と表示されれば起動成功です。
【起動メッセージ出力例】
---------------------------------------------------------------------------------------
<2025/08/09 1時15分18,607秒 日本標準時> <Notice> <WebLogicServer> <BEA-000365> <サーバー状態がRESUMINGに変化しました。>
<2025/08/09 1時15分18,720秒 日本標準時> <Notice> <WebLogicServer> <BEA-000331> <ドメイン"base_domain"で、WebLogic Server管理サーバー"AdminServer"を開発モードで 起動しました。>
<2025/08/09 1時15分18,721秒 日本標準時> <Notice> <Server> <BEA-002613> <チャネル"Default"は、現在192.168.11.6: 7001でプロトコルiiop, t3, ldap, snmp, httpをリス ニングしています。>
<2025/08/09 1時15分18,820秒 日本標準時> <Notice> <WebLogicServer> <BEA-000360> <サーバーがRUNNINGモードで起動しました。>
<2025/08/09 1時15分18,824秒 日本標準時> <Notice> <WebLogicServer> <BEA-000365> <サーバー状態がRUNNINGに変化しました。>
Admin Serverを起動したままの状態でデータ・ソースを追加します。WebLogic Remote Consoleを起動して画面右上「…」 – 「管理サーバ接続プロバイダの追加」をクリック、Admin Serverの接続プロバイダを作成します。
【接続プロバイダ設定】
設定項目 | 設定値 |
接続プロバイダ名 | local_console |
ユーザ名 | weblogic |
パスワード | <管理者アカウントのパスワード> |
URL | https://<PCのIPアドレス>:7001 |
セキュアでない接続の確立 | チェック |
Admin Serverに接続したら「ツリーの編集」をクリックします。画面左ツリーの「サービス」-「データ・ソース」でデータ・ソース管理画面を表示して画面中央上部の「新規」でデータ・ソース作成画面を開き、以下を設定して「作成」をクリックします。
【データソース】
設定項目 | 設定値 |
名前 | DS_PDBUSER_10 |
JNDI名 | DS_PDBUSER_10 |
ターゲット | AdminServer ※「使用可能」のAdminServerにチェックを入れて「>」クリック |
データ・ソース・タイプ | 汎用データ・ソース |
データベース・タイプ | Oracle |
データベース・ドライバ | Oracle’s Driver(Thin) for instance connections; Versions Any; |
データベース名 | prdb |
ホスト名 | <開発用DBサーバのIPアドレス> |
データベース・ユーザー名 | PDBUSER |
パスワード | <PDBUSERのパスワード> |
データ・ソース作成が終わればそのまま設定画面に遷移します。「接続プール」の「一般」と「拡張」を以下の通りに設定&保存します。
【接続プール設定】
タブ | 設定項目 | 設定値 |
接続プール 一般 | URL | jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.11.210)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=prpdb))) |
接続プール 拡張 | 予約時に接続をテスト | オン |
接続プール 拡張 | テスト頻度 | 60 |
接続プール 拡張 | テスト対象の表明 | SQL SELECT 1 FROM DUAL |
接続プール 拡張 | 接続作成の再試行間隔 | 10 |
「一般」タブに戻り「構成のテスト」をクリックしてデータ・ソースの設定を確認します。画面上部にDBに接続できたことを示すメッセージが表示されればOKです。


データソースの構成テストに問題がなければ画面右上「カート・マーク」-「変更をのコミット」をクリックして設定の変更(データ・ソース追加)を確定させます。

ドメインの binフォルダにある stopWebLogic.cmdをダブルクリックするか、コマンドプロンプトから下記コマンドを実行してAdmin Serverを停止します。
C:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\bin\stopWebLogic.cmd
Eclips
Eclipsのダウンロード・ページはこちら。
「Eclipse IDE for Enterprise Java and Web Developers」のWindows x86_64版をダウンロードします。

eclipse-jee-2025-06-R-win32-x86_64.zipを右クリック、「すべて展開」で展開先フォルダにCドライブ直下(C:\)を指定して展開します。
展開後にC:\eclipseフォルダのeclipse.iniをエディタで開き、末尾に以下の1行を追加してから同じフォルダにあるeclipse.exeをダブルクリックしてeclipseを起動します。
--add-opens=java.base/sun.net.www.protocol.jar=ALL-UNNAMED
ちなみにこの設定をすっ飛ばすとどうなるかというと、後でWebLogic ServerをEclipseに追加しようとしたときにこんなエラーが返されて往生します。
The server is invalid. Error occurred reading server credential. If the domain was recreated, the server instance in Eclipse must also be recreated. Required classpath for credential detection is missing. Detection is disabled.
Eclipseを起動すると最初にワークスペースの場所を聞かれるのでデフォルト(C:\Users\<ユーザ名>\eclipse-workspace)のまま「Launch」をクリックします。ワークスペース作成後に表示されるwelcomeページは画面上部の「×」で閉じます。

Eclipse画面が表示されたらまず、ワークスペースでWebLogic Serverを利用できるようにOracle Enterprise Pack for Eclipse(OEPE)のインストールです。
メニューバー「Help」-「Install New Server」をクリックします。

「Available Software」画面が表示されるので「Add」をクリックして「Add Repository」ダイアログ・ボックスを開きます。

「Add Repository」ダイアログ・ボックスで「Name」と「Location」を設定して「Add」をクリックします。
【Add Repository設定】
設定項目 | 設定値 |
Name | oracle |
Location | https://download.oracle.com/otn_software/oepe/12.2.1.10/photon/repository/ |
追加リポジトリの内容が表示されるので「Tools」を展開、「Oracle WebLogic Scripting Tools」と「Oracle WebLogic Server Tools」にチェックを入れて「Next」をクリックします。

OEPEインストールの事前チェックが行われ、暫くすると「Install Remediation Page」が表示されるのでそのまま「Next」をクリックします。

「Install Details」ページも「Next」です。

「Review Licenses」で「I accept the…」を選択、「Finish」でインストールが始まります。

インストールでは途中で何度か「Trust Authorities」と表示されます。対象にチェックを入れて「Trust Selected」をクリックします。

インストールの進捗はEclipse画面右下で確認できます。インストールが完了すると再起動を促すダイアログ・ボックスが表示されるので「Restart Now」をクリックしてEclipseを再起動します。


Eclipseが再起動したら次はPC上のWebLogic Serverの組み込みですが、この作業を行う前にドメインのsetDomainEnv.cmdを修正します。
WebLogic 14.1.1.0.0と14.1.2.0では setDomainEnv.cmdの環境変数指定で記述形式が変更されてしまっており、そのままEclipseにWebLogic Serverを組み込もうとするとこんなエラーが返されます。
Error occurred reading server configuration. WebLogic Home is not properly set in the start script 'C:/Oracle/Middleware/Oracle_Home/user_projects/domains/base_domain/bin/setDomainEnv.cmd'.

setDomainEnv.cmdの環境変数設定はWebLogic 14.1.1.0.0の場合、「set 環境変数=変数値」と記述していますが、WebLogic 14.1.2.0では「set “環境変数=変数値”」と変数から設定値までダブル・クォーテーションでくくっています。どうやらこの点がEclipse側のチェックに引っかかってしまっているようです。
そこで setDomainEnv.cmdを編集して WL_HOME指定箇所からダブル・クォーテーションを外し、ついでにEclipseのコンソール文字化け対策としてJVMの標準出力及び標準エラー出力のエンコードをUTF-8、コマンドプロンプト側の文字コードもUTF-8に設定します。
【編集対象ファイル】
---------------------------------------------------------------------------------------
C:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\bin\setDomainEnv.cmd
---------------------------------------------------------------------------------------
【編集内容】
---------------------------------------------------------------------------------------
編集内容:40行目
set "WL_HOME=C:\Oracle\Middleware\Oracle_Home\wlserver"
↓
set WL_HOME=C:\Oracle\Middleware\Oracle_Home\wlserver
編集内容:412行目
set "JAVA_OPTIONS=%JAVA_OPTIONS%"
↓
set "JAVA_OPTIONS=%JAVA_OPTIONS% -Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8"
ファイル末尾(追記)
chcp 65001
setDomainEnv.cmdの編集が終わったら Eclipseへの WebLogic Server組み込みです。メニューの「Window」-「Show View」-「Server」をクリックします。

画面中央下に表示されたリンク「No Servers are available.Click this link to create a new server」をクリックします。サーバ作成ウィザードが起動します。

最初は「Choose the type of server to create」です。「Select the server type」下のボックスで”Oracle”をツリー展開して「Oracle WebLogic Server」をクリック、「Server’s host name;」にPCのIPアドレス(上で作成したドメインのAdmin Serverリスニング・アドレス)を入力します。

次の「Define a WebLogic Runtime」では以下を設定します。なお、「Java home」は「WebLogic home」を設定するとJAVA_HOME環境変数の値が自動的にセットされます。
【Define a WebLogic Runtime画面設定】
設定項目 | 設定値 |
WebLogic home | C:\Oracle\Middleware\Oracle_Home\wlserver |
Java home | C:\Program Files\Java\jdk-21 |
Name | Oracle WebLogic Server 14.1.2.0 |
「Specifiy a WebLogic domain directory」では「Domain directory;」右側のボタンをクリック、「Browse」で以下のフォルダを選択します。
C:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain

「Specifiy a WebLogic domain directory」の次は「Modfy the resources that are configured on the server」ですが、そこでは何も設定することはないのでドメイン・ディレクトリを設定した後は「Next」ではなく「Finish」をクリックします。Eclipse画面下部に 「Oracle WebLogic Server…」が追加されればOKです。

EclipseへのWebLogicサーバの追加が完了したら起動確認を行います。
「Oracle WebLogic Server…」をクリックすると上段の開始ボタンが緑色に変化します。このボタンをクリックするとWebLogic Server(上で作成したドメインのAdmin Server)が起動します。

WebLogic Server起動中は上部のタブが 「Console」に切り替わり、起動が完了すると「Servers」タブに戻ります。また、正常に起動した場合は「Oracle WebLogic Server …」右端のステータスが「Started」に変化します。

起動確認の次は停止確認です。開始ボタンの右にある停止ボタンをクリックしてWebLogicが正常に停止することを確認します。
アプリケーション開発
プロジェクト作成
開発環境を構築してようやっとアプリ開発です。Eclipse画面左側の「Create a Dynamic Web project」リンクかメニューの「File」-「New」-「Dynamic Web project」をクリックします。

Dynamic Web project作成ウィザードが表示されるので以下の設定でDB接続確認用プロジェクトを作成します。
【Dynamic Web project作成ウィザード】
No. | 画面 | 操作 / 設定 |
1 | Dynamic Web Project | Project name:ConnCheck |
2 | Java | ①「source folder on build path」 ”src\main\java”選択 → 「Remove」 ②「Add folder」で「Add Source Folder」ダイアログ表示、 新しいソースフォルダに”src”を追加 |
3 | Web Module | Context root:ConnCheck Content directory:WebContent 「Generate web.xml deployment descriptor」:チェック |
Javaアプリ作成
プロジェクトができたら次はWebアプリの作成です。
まずはWebLogic上のデータソース経由でDBに”select ’OK’ from dual”を投げて結果を表示するだけのシンプルなDB生死確認アプリを作成します。
画面左「Project Explorer」の「ConnCheck」を右クリック -「New」-「Servlet」でサーブレット作成ウィザードを立ち上げ、「Create Servlet」画面で以下を設定して「Finish」をクリックします。
【Create Servlet画面設定内容】
設定項目 | 設定値 |
java package | pkgconnchk |
Class name | DBAliveCheck |
画面中央にサーブレット「DBAliveCheck」の初期ソースコードが表示されるので以下の内容に差し替えて一丁上がりです。
DBAliveCheckソースコード
package pkgconnchk;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
/**
* Servlet implementation class DBAliveCheck
*/
@WebServlet("/DBAliveCheck")
public class DBAliveCheck extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public DBAliveCheck() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Connection conn = null;
try {
String sql = "select 'OK' from dual";
Context envContext = new InitialContext();
DataSource ds = (DataSource)envContext.lookup("DS_PDBUSER_10");
conn = ds.getConnection();
String result = executeQuery(conn, sql, 1);
PrintWriter out = response.getWriter();
out.println(result);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
private String executeQuery(Connection conn, String sql) {
String result = "";
Statement stmt;
try {
stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery(sql);
while (rset.next()) {
result = result + rset.getString(1);
}
rset.close();
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println("result:" + result);
return result;
}
private String executeQuery(Connection conn, String sql, int count) {
String result = "";
for(int i = 0; i < count; i++) {
result = result + executeQuery(conn, sql);
}
return result;
}
}
作成したアプリがちゃんと動くか確認です。Eclipse画面右側「outline」の「DBAliveCheck」を右クリック -「Run As」-「1 Run on Server」でサーブレットを実行します。コードを保存するか聞かれたら「Save」、どのサーバで実行するか聞かれたら「Oracle WebLogic 14.1.2.0…」を選択して「Finish」をクリックします。
WebLogic Server が起動してしばらくするとブラウザ新しいページが開き、左上隅に「OK」と表示されたら成功です。

OKパターンの次はNGパターンも確認します。開発用DBサーバ上の”OracleServicePRDB”サービスを停止してから上のOKページをF5押下で更新すると、下のようにDB停止に伴う500エラーが返されます。

”OK”が返ってくればDBは起動、上記のように例外メッセージが返された場合は何らかのトラブルがあったと判別できたのでアプリの機能要件は何とか満たしていると言えそうです。
ただ、ちょっと問題があるとすればロードバランサによるバックエンド・サーバーのヘルスチェックやAP-DB間連携の障害テストでDBダウン時に上にあるようなエラーがズラズラ返されることになるので正直これはちょっとうっとおしい。そこでカスタムのエラーページを追加して500エラーが発生した場合は一律そちらに飛ばすように設定します。
Eclipse画面左側「Project Explorer」にある「WebContent」右クリック -「New」-「HTML File」をクリックして「create a new HTML file」ウィザードを立ち上げ、「File name」に ”error_custom.html”と入力して「Finish」をクリックします。

error_custom.htmlの初期ソースコードが表示されたら以下の内容に差し替えます。
error_custom.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
Connection Check Error.
</body>
</html>
「WebContent」-「WEB-INF」とツリー展開して「WEB-INF」の下にある web.xmlをダブルクリックします。デザインページが表示されるのでタブを「Source」に切り替えて13行目と13行目の間に以下の4行を挿入します。
<error-page>
<error-code>500</error-code>
<location>/error_custom.html</location>
</error-page>

画面上部のタブを「web.xml」から「DBAliviCheck.java」に切り替え、「outline」の「DBAliveCheck」右クリック -「Run As」-「1 Run on Server」クリックでアプリを実行します。ファイル保存はすべて「Save」です。

新しいWebページが立ち上がり下のように「Connection Check Error.」と表示されれば成功です。

DB生死監視アプリの次は本命のDBインスタンス名を取得するアプリも作成します。
画面左側「Project Explorer」の「ConnCheck」をツリー展開して「Java Resources」-「src」にある「pkgconnchk」を右クリック、「New」-「Servlet」でサーブレット作成ウィザードを立ち上げ、「Class name」に「InstNameGet」を入力して「Finish」をクリックします。
InstNameGetは DBAliveCheckのSQLを SYSDATEとV$INSTANCEのインスタンス名取得に変更するだけです。サーブレット作成ウィザードによる初期ソースコードが表示されたら以下の内容に差し替えます。
InstNameGet
package pkgconnchk;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
/**
* Servlet implementation class InstNameGet
*/
@WebServlet("/InstNameGet")
public class InstNameGet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public InstNameGet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Connection conn = null;
try {
String sql = "select to_char(sysdate,'YYYY/MM/DD HH24:Mi:SS') || ' ' || INSTANCE_NAME from V$INSTANCE";
Context envContext = new InitialContext();
DataSource ds = (DataSource)envContext.lookup("DS_PDBUSER_10");
conn = ds.getConnection();
String result = executeQuery(conn, sql, 1);
PrintWriter out = response.getWriter();
out.println(result);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
private String executeQuery(Connection conn, String sql) {
String result = "";
Statement stmt;
try {
stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery(sql);
while (rset.next()) {
result = result + rset.getString(1);
}
rset.close();
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println("result:" + result);
return result;
}
private String executeQuery(Connection conn, String sql, int count) {
String result = "";
for(int i = 0; i < count; i++) {
result = result + executeQuery(conn, sql);
}
return result;
}
}
停止している開発用DBサーバのOracleServicePRDBサービスを起動してからDBAliveCheckと同じ要領で InstNameGetを実行します。実行がうまう行けば日時とインスタンス名が返されます。

OKパターンの次はNGパターンです。開発用DBサーバのOracleServcePRDBサービスを停止して から InstNameGetを実行してDBAliveCheckと同じエラーページが返されることを確認します。
WARファイル作成
「Project Explorer」の「ConnCheck」を右クリック、「Export」-「WAR file」で「WAR Export」ウィザードを起動します。
「Destination」の右にある「Browse…」でWARファイルの出力フォルダ(場所は任意)を選択、「保存」クリックで「Destination」に”<出力フォルダ>\ConnCheck.war”がセットされます。「Export source files」、「Overwrite existng 」にチェックを入れて「Finish」をクリックすると「Destination」で指定したWARファイルが出力されるのでエクスプローラで確認します。


アプリ開発のモノづくりについてはここまでです。InstNameGetのNGパターン確認で停止した開発用DBサーバのOracleServicePRDBを起動、Eclipseから起動したWeBLogic Serverを停止してからEclipse本体も停止します。
次は本番環境でのデプロイと動作確認を行います。
参考情報
このページをを書くにあたり、以下の情報を参考にさせていただきました。


厚くお礼申し上げます。
コメント