Javaのフレームワーク Nablarch を使ってみる [ウェブアプリケーション編]

JavaのOSSフレームワーク [Nablarch](https://nablarch.github.io/docs/5u8/doc/index.html) を使って、疎通確認 + α してみます。
[Nablarch](https://nablarch.github.io/docs/5u8/doc/index.html)はウェブアプリケーション・Webサービス・バッチ・メッセージングと様々な用途で使用できるフレームワークです。
今回はウェブアプリケーションのプロジェクトを作ります。（他の実行制御基盤の記事を作成するかは未定です。）

### 環境
OS: OS X Yosemite 10.10.5
Maven: Apache Maven 3.3.3
IDE: IntelliJ IDEA 2016.2.3
Nablarch: 5u8

### やること
ブランクプロジェクトを作成して、ちょっとだけ触ってみます。
DBに登録されてる情報を取得し、表示します。

### 手順
[ブランクプロジェクトの作成方法](https://nablarch.github.io/docs/5u8/doc/application_framework/application_framework/blank_project/index.html)を参考に作成します。
とりあえず、作成するには次のコマンドを叩けばいいみたいなので、叩きます。
バージョンは5u8に変更してます。

```
mvn archetype:generate -DarchetypeGroupId=com.nablarch.archetype -DarchetypeArtifactId=nablarch-web-archetype -DarchetypeVersion=5u8
```

すると、プロジェクトの情報が聞かれるので入力します。今回は手順に記載されてるものと同じものを入力します。

* groupId : com.example
* artifactId : myapp-web
* version : 0.1.0
* package : com.example (そのままエンター）

これだけで、ブランクプロジェクトができました！
さっそくIDEで開いてみましょう！
![blank-project.png](https://qiita-image-store.s3.amazonaws.com/0/105279/b30028e1-e59f-55f4-2134-0a8aec547e3b.png)

できてますね！続いて疎通確認してみます。
mavenコマンドで、clean, compile, waitt:run の３つを実行すると、ウェブアプリケーションが起動し、ブラウザで表示されます。
![test-browse.png](https://qiita-image-store.s3.amazonaws.com/0/105279/75218e8d-897b-7d82-62e3-77c4f2dbd441.png)

正常に動いてますね！
じゃあ、ちょっとだけカスタマイズしていきます。
触ってみて動作確認するだけなので、いろいろ雑ですが。。。

まず、データ取得するDBのテーブルを用意します。
ID/NAME/AGE のカラムを持ったPERSONテーブルを作成して、データを一つ挿入しておきます。今回はIntelliJのデータベースアクセス機能で実行しました。接続情報はsrc/env/dev/resources/env.config に記載されています。

次にDBから取得したものを保持するためEntityクラスを用意します。

```java:Person.java
@Entity
public class Person {
    @Id
    private String id;
    private String name;
    private Integer age;

    // getter, setterは省略
}
```

続いて、アクションクラス（ロジック部分）を作成します。
PERSONテーブルからデータを取得して、リクエストスコープにセットし、jspに渡します。

```java:PersonAction.java
public class PersonAction {

    public HttpResponse search(HttpRequest request, ExecutionContext context) {
        List<Person> data = UniversalDao.findAll(Person.class);
        context.setRequestScopedVar("data", data);
        return new HttpResponse("/person/list.jsp");
    }
}
```

最後にjspを作成します。

```jsp:list.jsp
    <!-- html 定型部分は省略 -->
    <table border="1">
        <tr>
            <th>名前</th>
            <th>年齢</th>
        </tr>
        <c:forEach items="${data}" var="d">
        <tr>
            <td><n:write name="d.name" /></td>
            <td><n:write name="d.age" /></td>
        </tr>
        </c:forEach>
    </table>
```

これで完成です。

```
mvn clean compile waitt:run
```

で実行し、ブラウザで http://localhost:9080/action/person/search にアクセスします。
![test-browse2.png](https://qiita-image-store.s3.amazonaws.com/0/105279/17e0d7e4-a121-b8c4-2399-ab31871c97b3.png)

表示されてますね！
ちなみに、このURLは src/main/resources/routes.xml にマッピングの指定で
`<match path="/action/:controller/:action"/>`
とあるので、PersonActionクラスのsearchメソッドにマッピングされます。

### まとめ / 感想
細かい内容についてはNablarchの[解説書](https://nablarch.github.io/docs/5u8/doc/application_framework/application_framework/index.html)の方に任せて説明を省きましたが、上記のようにサクサクっとウェブアプリケーションが作成できました。実際に開発するとなると、カスタマイズする内容がたくさんあってサクサクとはいかないとしても、動くもの（ブランクプロジェクトや実装例としての[Example](https://github.com/nablarch/nablarch-example-web)）がすぐ用意できるのは触ってみやすいと感じました。
ほんとは、他のフレームワークと比較できたらよかったんですが、私が浅学のため断念しました。
今回作成したものは[github](https://github.com/heiwa/nablarch-webapp)に上げてます。