Java EEを使ったWebアプリケーションを勉強するためのローカル(Windows10)環境構築

Java EEを使ったWebアプリケーションを勉強したいため、ローカル(Windows10)に開発環境を構築する。
Webアプリケーションサーバーはpayara、DBはoracle、IDEはNetBeansを使うことにした。

***
**用意したもの**
Apache NetBeans 12.5
Apache-NetBeans-12.5-bin-windows-x64.exe。公式からダウンロードした。NetBeansにはJava EEが含まれている。

JDK 11
jdk-11.0.13_windows-x64_bin.exe。公式からダウンロードした。NetBeans自体がこれで動いてるのかな？たぶん。

Payara Server 5.2021.9
payara-5.2021.9.zip。公式からダウンロードした。今回のWebアプリケーションサーバ―

Oracle Database 19c
WINDOWS.X64_193000_db_home.zip。公式からダウンロードした。Oralceを攻めたい

A5MK
a5m2_2.16.2_x86.zip。公式からダウンロードした。DBいじる用

SQL Plus Version 21.3.0.0.0
instantclient-basic-windows.x64-21.3.0.0.0.zip & instantclient-sqlplus-windows.x64-21.3.0.0.0.zip。公式からダウンロードした。2つないと動かないらしい。あとは、microsoft visual ～系がいるらしいが、自分の端末(Windows10)では特になにか入れなくても動いた。
A5MKではできないコマンドをDBに対して実行する用

***
**手順1**
JDK11をインストールしてから、NetBeansをインストールする。特になにか設定などはなかったように思う。

***
**手順2**
Payaraのzipを展開する。次にNetBeansのServices＞Serversから展開したPayaraを追加する。自分は以下のように追加した
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328430/9d713e41-717a-2696-cfe8-58f66990de78.png)

***
**手順3**
Oracle DBのzipを展開する。展開した中にある以下のインストーラーを起動する。
app\oracle\product\19.3.0\dbhome_1\setup.exe

インストーラーに従い、進めていく。
自分は、データベース・インストールでは、単一インスタンス・データベースを作成を選択し、
システムクラスはデスクトップクラスを選択(うろ覚え)、
Oracleホーム・ユーザーは仮想アカウントの使用を選択した。

以下を参考にした。
https://www.oborodukiyo.info/ORACLE/19c/ORA-DownloadOracle19cForWindows

インストール後、以下のファイルを必要であれば編集する。
app\oracle\product\19.3.0\dbhome_1\network\admin\tnsnames.ora
ORCL&nbsp;=
&nbsp;&nbsp;(DESCRIPTION&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;(ADDRESS&nbsp;=&nbsp;(PROTOCOL&nbsp;=&nbsp;TCP)(HOST&nbsp;=&nbsp;localhost)(PORT&nbsp;=&nbsp;1521))
&nbsp;&nbsp;&nbsp;&nbsp;(CONNECT_DATA&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(SERVER&nbsp;=&nbsp;DEDICATED)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(SERVICE_NAME&nbsp;=&nbsp;orcl)
&nbsp;&nbsp;&nbsp;&nbsp;)
&nbsp;&nbsp;)

↓これがなければ追記する↓
ORCLPDB&nbsp;=←接続文字列任意
&nbsp;&nbsp;(DESCRIPTION&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;(ADDRESS&nbsp;=&nbsp;(PROTOCOL&nbsp;=&nbsp;TCP)(HOST&nbsp;=&nbsp;localhost)(PORT&nbsp;=&nbsp;1521))
&nbsp;&nbsp;&nbsp;&nbsp;(CONNECT_DATA&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(SERVER&nbsp;=&nbsp;DEDICATED)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(SERVICE_NAME&nbsp;=&nbsp;orclpdb)←プラガブルデータベースのサービス名。サービス名はlsnrctl&nbsp;statusで確認できるらしい。
&nbsp;&nbsp;&nbsp;&nbsp;)
&nbsp;&nbsp;)
↑↑↑

以下を参考にした。
https://kenko-keep.com/pdb-ora-01017/
***
**手順4**
SQL Plus関連zip(instantclient-basic-windows.x64-21.3.0.0.0.zip & instantclient-sqlplus-windows.x64-21.3.0.0.0.zip)を展開する。2つのzipは同じディレクトリに展開する。
展開後、DBにあったtnsnames.oraを(zip展開先の親)\instantclient_21_3配下に置く。←もしかしたら不要かも

環境変数を設定する。
変数名：値
NLS_LANG：Japanese_Japan.JA16SJISTILDE
ORACLE_BASE：(DB展開先)例 E:\app\oracle\product\19.3.0
ORACLE_HOME：(DB展開先)例 E:\app\oracle\product\19.3.0\dbhome_1
TNS_ADMIN：(SQL Plus展開先に置いたtnsname.oraの場所) 例：E:\～\instantclient_21_3 ←もしかしたら、直接DBにあるtnsname.oraを指定してもいいのかもしれない

環境変数「Path」に「%ORACLE_HOME%」を追加

以下を参考にした。
https://www.bnote.net/oracle/instant_sqlplus.html

Oracle DBにはコンテナ・データベース(CDB)と、その下にプラガブル・データベース(PDB)と呼ばれる子DBがあるらしく、ユーザー(スキーマ)はPDBにしか作成できないため、PDBに作成する。CDB、PDBはこれまでのDBインストールで既に作成されている。(経験談)

以下を参考にPDBにユーザーを作成する。
https://www.dbsheetclient.jp/blog/?p=1566
上記、リンク先にある通り、インストール直後のPDBのOPEN_MODEは「MOUNTED」のため、「READ WRITE」に変更する必要がある。

***
**手順5**
A5MKを起動。データベースの追加と削除から、PDBへの接続を作る。作成したユーザーで接続できればOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328430/3c415ec2-eac3-b9a2-dd88-357014192a96.png)
***
**手順6**
NetBeansの左上のFileタグからNew Projectを選択し、Web Applicationプロジェクトを作成する。Categoriesはよく分かっていないが、使い慣れてるMavenにした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328430/047a4cf3-88a1-9e14-fa4c-9046b067ea36.png)

以下にあるファイルを編集する。
(作成されたプロジェクト)\src\main\resources\META-INF\persistence.xml

ない場合は、プロジェクトを右クリック＞New＞Otherで開くNew File画面から
Categories：Persistence
File Types：Persistence Unitを選択して作る。

ファイル内容は以下
\<persistence-unit&nbsp;name="xxxxxx"&nbsp;transaction-type="RESOURCE_LOCAL">←扱うDBは1つなので、RESOURCE_LOCALを指定。複数扱いたい場合は、分散トランザクションできるJTAを指定する。
&nbsp;&nbsp;\<exclude-unlisted-classes>false</exclude-unlisted-classes>←実はよく意味をわかっていない。
&nbsp;&nbsp;\<properties>
&nbsp;&nbsp;&nbsp;&nbsp;\<property&nbsp;name="javax.persistence.jdbc.url"&nbsp;value="jdbc:oracle:thin:@ORCLPDB"/>
&nbsp;&nbsp;&nbsp;&nbsp;\<property&nbsp;name="javax.persistence.jdbc.user"&nbsp;value="xxxxx"/>
&nbsp;&nbsp;&nbsp;&nbsp;\<property&nbsp;name="javax.persistence.jdbc.driver"&nbsp;value="oracle.jdbc.OracleDriver"/>
&nbsp;&nbsp;&nbsp;&nbsp;\<property&nbsp;name="javax.persistence.jdbc.password"&nbsp;value="xxxxx"/>
&nbsp;&nbsp;&nbsp;&nbsp;\<property&nbsp;name="javax.persistence.schema-generation.database.action"&nbsp;value="create"/>←実はよく意味をわかっていない。
&nbsp;&nbsp;\</properties>
\</persistence-unit>


以下を参考にした
https://accelebiz.hatenablog.com/entry/20150322/1426997344
***
以上で環境構築は終了。
お疲れ様でした。:smiley::tada::poultry_leg::cake::champagne: