『わかりやすいJakarta EE ウェブシステム入門』の sample21 を VS Code + WildFly + PostgreSQL でやる

『わかりやすいJakarta EE ウェブシステム入門』では NetBeans + Payara Server + MySQL を使っていますが、VS Code + WildFly + PostgreSQL を使いたい事情があり、挑戦してみました。


## 前提

VS Code + WildFly で sample01 を実施済みとします。

https://qiita.com/hanotch/items/79ecae6b04cc66e123ee


## sample21-01 を開く

C:\jet\projects\sampleProjects\sample21-01 フォルダーを VS Code で開きます。


## docker-compose

以下の内容で docker-compose.yml を作成し、`docker-compose up -d` します。

```yaml:docker-compose.yml
services:
  db:
    image: postgres
    container_name: postgres-yokuwakaruee
    environment:
      POSTGRES_PASSWORD: app
    ports:
      - 5432:5432
```


## VS Code への Docker プラグインの導入と Docker コンテナーの操作

簡単だったので省略。


## pom.xml の変更

pom.xml に以下を書き加えます。

### dependencies への追加

```xml
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.7.4</version>
</dependency>
```

### plugins への追加

sample01 で実施した内容に加え、package フェイズで以下を実行するようにします。

1. サーバーの起動
1. JDBC ドライバーの追加
1. データ ソース (コネクション プール) の追加
1. サーバーの停止

```xml
			<plugin>
				<groupId>org.wildfly.plugins</groupId>
				<artifactId>wildfly-maven-plugin</artifactId>
				<version>4.2.2.Final</version>
				<configuration>
					<version>26.1.3.Final</version>
					<javaHome>C:\path\to\jdk-11</javaHome>
					<debug>true</debug>
				</configuration>
				<executions>
					<!-- deployment preparation -->
					<execution>
						<id>start-server</id>
						<phase>package</phase>
						<goals>
							<goal>start</goal>
						</goals>
					</execution>
					<!-- deployment -->
					<execution>
						<id>deploy-postgresql</id>
						<phase>package</phase>
						<goals>
							<goal>deploy-artifact</goal>
						</goals>
						<configuration>
							<groupId>org.postgresql</groupId>
							<artifactId>postgresql</artifactId>
							<name>postgresql.jar</name>
						</configuration>
					</execution>
					<!-- connection-pooling datasource -->
					<execution>
						<id>add-datasource</id>
						<phase>package</phase>
						<goals>
							<goal>add-resource</goal>
						</goals>
						<configuration>
							<address>subsystem=datasources,data-source=mydbpool</address>
							<resources>
								<resource>
									<properties>
										<jndi-name>java:/jdbc/mydb</jndi-name>
										<connection-url>jdbc:postgresql://localhost/postgres</connection-url>
										<driver-class>org.postgresql.Driver</driver-class>
										<driver-name>postgresql.jar</driver-name>
										<user-name>postgres</user-name>
										<password>app</password>
									</properties>
								</resource>
							</resources>
						</configuration>
					</execution>
					<!-- shutdown before wildfly:dev -->
					<execution>
						<id>shutdown-server</id>
						<phase>package</phase>
						<goals>
							<goal>shutdown</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
```


## 文字化け防止

sample01 で作成した jboss-web.xml を webapp\WEB-INF に配置します。

```xml:jboss-web.xml
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
        <default-encoding>UTF-8</default-encoding>
</jboss-web>
```


## 実行

これで、Ctrl+Shift+P > Maven:Execute Commands... > Custom... > clean package wildfly:dev を実行すると、サーバーがダウンロードされ、http://localhost:8080/sample21-01/ にアクセスすると画面を確認することができます。

wildfly:dev の前に package を実行することがとても重要です。