<commit_before># gsp-dba-maven-plugin

gsp-dba-maven-pluginは、DBAのルーチンワークを自動化し、本来のデータモデリング作業に
集中できるようにするためのツールです。

以下の操作が簡単に実行できるようになります。

* ER図からDDLを生成し実行する。
* データベースのテーブルに対応したEntityクラスを生成する。
* CSV形式のデータをデータベースに登録する。
* データベーススキーマのダンプファイルを取得する。
* リポジトリ上のダンプファイルをローカル環境へ反映する。

> * ER図からDDLを生成するには、モデリングツールとして[SI Object Browser ER](http://www.sint.co.jp/siob/er/)を使用する必要があります。
> それ以外のツールを使用する場合、DDL生成機能は使用できません。また、DDL実行機能の利用もお勧めしません。
> 別の方法でDDLを実行しておけば、DDL生成機能、DDL実行機能以外は問題なく利用できます。

> * gsp-dba-maven-pluginは開発フェーズで用いることを想定しています。開発者のローカルDBを主ターゲットとしたツールです。  
本番環境での使用は推奨しません。  
 

想定されるデータモデリングは以下の資料を参考にしています。
* [イミュータブル データモデル (入門編)](http://www.slideshare.net/kawasima/ss-40471672)  
* [イミュータブルデータモデル(世代編)](http://www.slideshare.net/kawasima/ss-44958468)  

## ゴールの概要

* [generate-ddl](#generate-ddl) データモデルを解析し、DDLを生成する。
* [execute-ddl](#execute-ddl) DDLを実行する。
* [load-data](#load-data) CSV形式で定義したデータをデータベースに登録する。
* [generate-entity](#generate-entity) 指定したスキーマを解析し、Entityクラスを生成する。
* [export-schema](#export-schema) データベーススキーマをダンプする。
* [import-schema](#import-schema) リポジトリから取得したダンプファイルをインポートする。

各ゴールに対応するMojoクラスは[jp.co.tis.gsp.tools.dba.mojo](src/main/java/jp/co/tis/gsp/tools/dba/mojo)パッケージにあります。

データベースによって、動作が異なる場合や制約事項があります。
詳細は、 **データベースの対応状況** を参照してください。

## 使用方法

### 設定

pom.xmlに以下の設定を追加することでプラグインが使用できるようになります。

```xml
<pluginManagement>
  <plugins>
    <plugin>
      <groupId>jp.co.tis.gsp</groupId>
      <artifactId>gsp-dba-maven-plugin</artifactId>
      <version>
        使用するgsp-dba-maven-pluginのバージョン
      </version>
      <dependencies>
        <!-- プロジェクトで使用するDB製品にあわせたJDBCドライバに修正してください。 -->
        <dependency>
          <groupId>com.oracle</groupId>
          <artifactId>ojdbc6</artifactId>
          <version>11.2.0.2.0</version>
        </dependency>
      </dependencies>
    </plugin>
  </plugins>
</pluginManagement>
```

### Java11での設定

Java11で使用する場合pom.xmlに以下の設定を追加してください。

```xml
<pluginManagement>
  <plugins>
    <plugin>
      <groupId>jp.co.tis.gsp</groupId>
      <artifactId>gsp-dba-maven-plugin</artifactId>
      <!-- Java11で使用できるgsp-dba-maven-pluginのバージョンは4.4.0以降です。 -->
      <version>4.4.0</version>
      <dependencies>
        <!-- プロジェクトで使用するDB製品にあわせたJDBCドライバに修正してください。 -->
        <dependency>
          <groupId>com.oracle</groupId>
          <artifactId>ojdbc6</artifactId>
          <version>11.2.0.2.0</version>
        </dependency>
        <!-- 以下を追加するようにしてください。 -->
        <dependency>
          <groupId>javax.activation</groupId>
          <artifactId>javax.activation-api</artifactId>
          <version>1.2.0</version>
        </dependency>
        <dependency>
          <groupId>javax.xml.bind</groupId>
          <artifactId>jaxb-api</artifactId>
          <version>2.3.0</version>
        </dependency>
        <dependency>
          <groupId>com.sun.xml.bind</groupId>
          <artifactId>jaxb-core</artifactId>
          <version>2.3.0</version>
        </dependency>
        <dependency>
          <groupId>com.sun.xml.bind</groupId>
          <artifactId>jaxb-impl</artifactId>
          <version>2.3.0</version>
        </dependency>
        <dependency>
          <groupId>javax.annotation</groupId>
          <artifactId>javax.annotation-api</artifactId>
          <version>1.3.2</version>
        </dependency>
      </dependencies>
    </plugin>
  </plugins>
</pluginManagement>
```

### ゴール共通のパラメータ

以下のパラメータは全てのゴールで共通です。
対応する値を設定してください。

| 設定値    | 必須  | 説明                                                            |
|:---------------|:-----:|:----------------------------------------------------------------|
| driver         | ○     | 使用するJDBCドライバ。                                         |
| url            | ○     | データベースのURL。 jdbc:subprotocol:subname 形式。            |
| adminUser      | ○     | データベースのadminユーザ名。Oracleの場合はsysは指定出来ません。DB2の場合はデータベース作成ユーザか対象データベースでDBADM権限を持つユーザを指定して下さい(db2adminを指定すると、データベースのバージョンによってはエラーになります)。|<commit_msg>doc: Java 17 用の設定を追記 (#152)<commit_after># gsp-dba-maven-plugin

gsp-dba-maven-pluginは、DBAのルーチンワークを自動化し、本来のデータモデリング作業に
集中できるようにするためのツールです。

以下の操作が簡単に実行できるようになります。

* ER図からDDLを生成し実行する。
* データベースのテーブルに対応したEntityクラスを生成する。
* CSV形式のデータをデータベースに登録する。
* データベーススキーマのダンプファイルを取得する。
* リポジトリ上のダンプファイルをローカル環境へ反映する。

> * ER図からDDLを生成するには、モデリングツールとして[SI Object Browser ER](http://www.sint.co.jp/siob/er/)を使用する必要があります。
> それ以外のツールを使用する場合、DDL生成機能は使用できません。また、DDL実行機能の利用もお勧めしません。
> 別の方法でDDLを実行しておけば、DDL生成機能、DDL実行機能以外は問題なく利用できます。

> * gsp-dba-maven-pluginは開発フェーズで用いることを想定しています。開発者のローカルDBを主ターゲットとしたツールです。  
本番環境での使用は推奨しません。  
 

想定されるデータモデリングは以下の資料を参考にしています。
* [イミュータブル データモデル (入門編)](http://www.slideshare.net/kawasima/ss-40471672)  
* [イミュータブルデータモデル(世代編)](http://www.slideshare.net/kawasima/ss-44958468)  

## ゴールの概要

* [generate-ddl](#generate-ddl) データモデルを解析し、DDLを生成する。
* [execute-ddl](#execute-ddl) DDLを実行する。
* [load-data](#load-data) CSV形式で定義したデータをデータベースに登録する。
* [generate-entity](#generate-entity) 指定したスキーマを解析し、Entityクラスを生成する。
* [export-schema](#export-schema) データベーススキーマをダンプする。
* [import-schema](#import-schema) リポジトリから取得したダンプファイルをインポートする。

各ゴールに対応するMojoクラスは[jp.co.tis.gsp.tools.dba.mojo](src/main/java/jp/co/tis/gsp/tools/dba/mojo)パッケージにあります。

データベースによって、動作が異なる場合や制約事項があります。
詳細は、 **データベースの対応状況** を参照してください。

## 使用方法

### 設定

pom.xmlに以下の設定を追加することでプラグインが使用できるようになります。

```xml
<pluginManagement>
  <plugins>
    <plugin>
      <groupId>jp.co.tis.gsp</groupId>
      <artifactId>gsp-dba-maven-plugin</artifactId>
      <version>
        使用するgsp-dba-maven-pluginのバージョン
      </version>
      <dependencies>
        <!-- プロジェクトで使用するDB製品にあわせたJDBCドライバに修正してください。 -->
        <dependency>
          <groupId>com.oracle</groupId>
          <artifactId>ojdbc6</artifactId>
          <version>11.2.0.2.0</version>
        </dependency>
      </dependencies>
    </plugin>
  </plugins>
</pluginManagement>
```

### Java11での設定

Java11で使用する場合pom.xmlに以下の設定を追加してください。

```xml
<pluginManagement>
  <plugins>
    <plugin>
      <groupId>jp.co.tis.gsp</groupId>
      <artifactId>gsp-dba-maven-plugin</artifactId>
      <!-- Java11で使用できるgsp-dba-maven-pluginのバージョンは4.4.0以降です。 -->
      <version>4.4.0</version>
      <dependencies>
        <!-- プロジェクトで使用するDB製品にあわせたJDBCドライバに修正してください。 -->
        <dependency>
          <groupId>com.oracle</groupId>
          <artifactId>ojdbc6</artifactId>
          <version>11.2.0.2.0</version>
        </dependency>
        <!-- 以下を追加するようにしてください。 -->
        <dependency>
          <groupId>javax.activation</groupId>
          <artifactId>javax.activation-api</artifactId>
          <version>1.2.0</version>
        </dependency>
        <dependency>
          <groupId>javax.xml.bind</groupId>
          <artifactId>jaxb-api</artifactId>
          <version>2.3.0</version>
        </dependency>
        <dependency>
          <groupId>com.sun.xml.bind</groupId>
          <artifactId>jaxb-core</artifactId>
          <version>2.3.0</version>
        </dependency>
        <dependency>
          <groupId>com.sun.xml.bind</groupId>
          <artifactId>jaxb-impl</artifactId>
          <version>2.3.0</version>
        </dependency>
        <dependency>
          <groupId>javax.annotation</groupId>
          <artifactId>javax.annotation-api</artifactId>
          <version>1.3.2</version>
        </dependency>
      </dependencies>
    </plugin>
  </plugins>
</pluginManagement>
```

### Java17での設定

Java17で使用する場合、以下2つの対応が必要になります。

- pom.xmlに依存関係を追加する
- MavenのJVMオプションに--add-opensを追加する

#### pom.xmlに依存関係を追加する

pom.xmlに以下の設定を追加してください。

なお、 [Java11での設定](#Java11での設定) との違いは、以下の2点になります。

- `jaxb-impl` のバージョンに `2.3.5` を指定する
- `jaxb-api` のアーティファクトを外す
    - `jaxb-impl` の `2.3.5` が、 `jakarta.xml.bind-api` という別のアーティファクトを推移的に使用するため

```xml
<pluginManagement>
  <plugins>
    <plugin>
      <groupId>jp.co.tis.gsp</groupId>
      <artifactId>gsp-dba-maven-plugin</artifactId>
      <!-- Java17で使用できるgsp-dba-maven-pluginのバージョンは4.4.0以降です。 -->
      <version>4.4.0</version>
      <dependencies>
        <!-- プロジェクトで使用するDB製品にあわせたJDBCドライバに修正してください。 -->
        <dependency>
          <groupId>com.oracle</groupId>
          <artifactId>ojdbc6</artifactId>
          <version>11.2.0.2.0</version>
        </dependency>
        <!-- 以下を追加するようにしてください。 -->
        <dependency>
          <groupId>javax.activation</groupId>
          <artifactId>javax.activation-api</artifactId>
          <version>1.2.0</version>
        </dependency>
        <dependency>
          <groupId>com.sun.xml.bind</groupId>
          <artifactId>jaxb-core</artifactId>
          <version>2.3.0</version>
        </dependency>
        <dependency>
          <groupId>com.sun.xml.bind</groupId>
          <artifactId>jaxb-impl</artifactId>
          <version>2.3.5</version>
        </dependency>
        <dependency>
          <groupId>javax.annotation</groupId>
          <artifactId>javax.annotation-api</artifactId>
          <version>1.3.2</version>
        </dependency>
      </dependencies>
    </plugin>
  </plugins>
</pluginManagement>
```

#### MavenのJVMオプションに--add-opensを追加する

以下のようにして、環境変数 `MAVEN_OPTS` に `--add-opens` の JVM オプションを追加してください。

```
> set MAVEN_OPTS=%MAVEN_OPTS% --add-opens java.base/java.lang=ALL-UNNAMED
```

### ゴール共通のパラメータ

以下のパラメータは全てのゴールで共通です。
対応する値を設定してください。

| 設定値    | 必須  | 説明                                                            |
|:---------------|:-----:|:----------------------------------------------------------------|
| driver         | ○     | 使用するJDBCドライバ。                                         |
| url            | ○     | データベースのURL。 jdbc:subprotocol:subname 形式。            |
| adminUser      | ○     | データベースのadminユーザ名。Oracleの場合はsysは指定出来ません。DB2の場合はデータベース作成ユーザか対象データベースでDBADM権限を持つユーザを指定して下さい(db2adminを指定すると、データベースのバージョンによってはエラーになります)。|
{'fraction_non_alphanumeric': 0.16000413180456563, 'fraction_numerical': 0.017146988947422788, 'mean_word_length': 2.6480783722682744, 'pattern_counts': {'":': 0, '<': 236, '<?xml version=': 0, '>': 245, 'https://': 0, 'lorem ipsum': 0, 'www.': 6, 'xml': 21}, 'pii_count': 5, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 7, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6213747', 'n_tokens_mistral': 5138, 'n_tokens_neox': 4740, 'n_words': 332}