APサーバ構築 4(Webアプリ作成)

APサーバ・Weblogic

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 2022https://info.microsoft.com/ww-landing-windows-server-2022.html?lcid=jaSERVER_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.設定項目操作 / 設定内容
1VMWareツールのインストール①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.画面操作 / 設定
1C:\app\oracle\product\21c\dbhome_1のsetup.exeをダブルクリックしてインストーラを起動
2構成オプションの選択「ソフトウェアのみ」を選択
3データベース・インストール・オプションの選択「単一インスタンス・データベースのインストール」を選択
4データベース・エディションの選択「Enterprise Edition」を選択
5Oracleホーム・ユーザーの指定「仮想アカウントの使用」を選択
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
2PDB起動/停止確認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”となったことを確認
3oracleアカウント作成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;
4PDB自動起動設定sqlplus上で以下のコマンドを実行
————————————————–
— CDBの再起動時のPDBオープン・モードを保持
alter pluggable database PRPDB save state;

【OracleNetサービス設定】

No.画面操作 / 設定
「スタート」-「Oracle-OraDB21Home1」-「Net Configuration Assistant」をクリックしてNETCAを起動
ようこそ「ローカル・ネット・サービス名構成(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.0Microsoft 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.設定操作 / 設定
Oracle Instant Client BASE ZIPファイル展開instantclient-basic-…dbru.zipをC:\Oracleに展開
2Oracle 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
4Oracle Netサービス設定アプリ開発用DBサーバの tnsnames.ora をリモートデスクトップ経由でPCにコピー
—————————-
●コピー元フォルダ
C:\app\oracle\homes\OraDB21Home1\network\admin\
●コピー先フォルダ
C:\oracle\instantclient_21_18\network\admin
5sqlplus接続確認コマンドプロンプトを起動、以下のコマンドで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】

ダウンロードURL
https://download.oracle.com/java/21/latest/jdk-21_windows-x64_bin.exe

ダウンロードが完了したらダブルクリックでインストーラを起動します。途中で何か聞かれても全部デフォルトのままで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
パスワード<管理者アカウントのパスワード>
URLhttps://<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のパスワード>

データ・ソース作成が終わればそのまま設定画面に遷移します。「接続プール」の「一般」と「拡張」を以下の通りに設定&保存します。

【接続プール設定】

タブ設定項目設定値
接続プール
一般
URLjdbc: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 Packages | The Eclipse Foundation – home to a global community, the Eclipse IDE, Jakarta EE and over 350 open source projects…

「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設定】

設定項目設定値
Nameoracle
Locationhttps://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 homeC:\Oracle\Middleware\Oracle_Home\wlserver
Java homeC:\Program Files\Java\jdk-21
NameOracle 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.画面操作 / 設定
1Dynamic Web ProjectProject name:ConnCheck
2Java①「source folder on build path」
  ”src\main\java”選択 → 「Remove」
②「Add folder」で「Add Source Folder」ダイアログ表示、
新しいソースフォルダに”src”を追加
3Web ModuleContext 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 packagepkgconnchk
Class nameDBAliveCheck

画面中央にサーブレット「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本体も停止します。

次は本番環境でのデプロイと動作確認を行います。

参考情報

このページをを書くにあたり、以下の情報を参考にさせていただきました。

開発環境の準備 | Javaコード入門
Java入門の基礎知識からコード確認、索引、目的別検索までWebエンジニアの為Javaコード辞典。
【備忘録】Eclipseで動的Webを新規作成してGitHub管理まで - Qiita
概要 Eclipseで動的Webのプロジェクトを触っていると、「すでに出来ているプロジェクトへの改変」作業を繰り返すので、実は「新規」で作ろうとすると手順が思い出せずアタフタします。 なので、ここでは備忘録としてEclipse(Pleiad...
fw_error_www
WebLogic データソース管理POC - Qiita
本記事の目的 WebLogicでデータソースを構成する手順とサンプルコード、データベース接続検証関連パラメータの製品挙動についてまとめている。 WAS Liberty編、JBoss編、Tomcat編についてはこちらを参照ください。 WebS...
アプリケーションのデプロイ
WebLogic Remote Consoleを使用して、WebLogic Serverへのアプリケーションのデプロイメント・プロセスを管理できます。 アプリケーション・デプロイメント・プロセスの一般情報は、『Oracle WebLogic...
Database Clientインストレーション・ガイド
Oracle Technology Network (OTN)のOracle Instant Clientダウンロード・ページからzipファイルをダウンロードすることによって、Oracle Instant Clientをインストールできます...

厚くお礼申し上げます。

コメント

タイトルとURLをコピーしました