目次へ

5. Maven による実アプリケーション開発

2006.07.24 株式会社四次元データ 鈴木 圭

今回は Maven を用いた具体的な開発例として、Web ベースの簡単なチャットアプリケーションを作成したいと思います。

前章までは Maven を用いた開発に必要な情報を個別に紹介してきましたので、本章ではそれらのまとめとして、Web ベースの簡単なチャットアプリケーションの作成を例に、具体的な開発の道のりを紹介したいと思います。

5.1. 作成するアプリケーションの概要

今回作成する Web ベースのチャットアプリケーションのインタフェースは次のようになります:

webchat

また、完成品のダウンロードは以下のリンクから行うことができます:

webchat.lzh

アプリケーションの特徴は:

  • 表示は単一の JSP ページで行う
  • 表示の更新は手動で行う
  • Web サーバには Tomcat を使用する
  • アプリケーション・フレームワークとして Struts を使用する

という具合に、必要最小限の機能の実装を行います。

5.2. プロジェクトの準備

まずはプロジェクトの作成から Eclipse へのインポートまでの手順を説明します。

5.2.1. プロジェクトの作成

プロジェクトの groupId と artifactId は、それぞれ「com.example.webchat」と「webchat」として作成します:

groupId artifactId
com.example.webchat webchat

今までは JAR を作成するプロジェクトしか作成しませんでしたが、今回は Web アプリケーション用のプロジェクトを作成します:

mvn archetype:create -DgroupId=com.example.webchat
                     -DartifactId=webchat
                     -DarchetypeArtifactId=maven-archetype-webapp

Web アプリケーション用のプロジェクトを作成する場合は、通常の (JAR を作成する) プロジェクトを作成する場合とは異なり、archetypeArtifactId パラメータで「maven-archetype-webapp」を指定します。archetypeArtifactId は作成するスケルトンの種類を指定するためのものであり、今までは省略時のデフォルトである「maven-archetype-quickstart」としてプロジェクトを作成していました。今回は Web アプリケーション用のスケルトンを作成するので、明示的に指定します。

作成されたプロジェクトの構成は次のようになっています:

webchat
  │  pom.xml
  │
  └─src
      └─main
          ├─resources
          └─webapp
              │  index.jsp
              │
              └─WEB-INF
                      web.xml

5.2.2. ソースコード用ディレクトリの作成

Web アプリケーション用のスケルトンには Java のソースコードを配置するディレクトリ (src/main/java) が作成されないので、手作業で作成します。以下の構成になるように src/main/java 以下のディレクトリを作成してください:

webchat
  │  pom.xml
  │
  └─src
      └─main
          ├─java
          │  └─com
          │      └─example
          │          └─webchat
          ├─resources
          └─webapp
              │  index.jsp
              │
              └─WEB-INF
                      web.xml

5.2.3. プロジェクトの設定

コーディングに入る前に、プロジェクトの設定を行いましょう。pom.xml を開き、次の変更を行ってください:

  • project/artifactId の値を「webchat」に変更する。
  • project/version の値を「1.0」に変更する。
  • project/url 要素を削除する。
  • Java 1.5 としてコンパイルするように maven-compiler-plugin の設定を行う。

設定を行った後の pom.xml は次のようになります:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example.webchat</groupId>
  <artifactId>webchat</artifactId>
  <packaging>war</packaging>
  <version>1.0</version>
  <name>webchat</name>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <finalName>webchat</finalName>

    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

とりあえず、最初の設定はこれだけにしておき、あとは必要に応じて設定を行うことにしましょう。

(プラグインの設定方法については「3.2. プラグインについて」で説明しました。)

ここまでの作業が終われば、プロジェクトを Eclipse にインポートします。

5.2.4. Eclipse にインポートする

プロジェクトを Eclipse にインポートするには、次のコマンドでプロジェクトを Eclipse のプロジェクトに変換します:

mvn eclipse:eclipse

次に Eclipse から (「Existing Projects into Workspace」として) インポートします:

プロジェクトを Eclipse にインポートする詳しい方法は、前回の「4. Eclipse との連携」で説明しているので、そちらも参照してください。

5.3. データベース部分の作成 (com.example.webchat.db.*)

データベース関係のクラスやインタフェースは com.example.webchat.db パッケージ以下に作成することにします。(今回のサンプルではデータベースを実際に用意するのではなく、チャットでの発言データなどは全てメモリ上に保存します。)

作成するのはチャットアプリケーションなので、チャットでの発言を保持するクラスと、それを保存/取得するためインタフェース及び実装クラスを作成します:

com.example.webchat.db.bean.MessageBean チャットでの発言を保持するクラス。
com.example.webchat.db.dao.MessageDao MessageBean を保存/取得するためのインタフェース。
com.example.webchat.db.dao.impl.MessageDaoOnMemoryImpl データをメモリ上に記録する MessageDao の実装。

5.3.1. MessageBean

MessageBean クラスは、チャットでの発言を保持するクラスです:

public class MessageBean
{
    // 発言日時.
    private Date date = null;

    // 発言者名.
    private String name = null;

    // 発言内容.
    private String message = null;

    //
    //  ... コンストラクタ及びアクセッサ.
    //
}

MessageBean クラスには「発言日時」「発言者名」「発言内容」の 3 つのプロパティを持たせました。

5.3.2. MessageDao

MessageDao は、MessageBean の保存と取得を行うためのインタフェースです:

public interface MessageDao
{
    // チャットでの発言を保存します.
    public void save(MessageBean message);

    // チャットでの発言データを返します.
    public MessageBean[] getAll();
}

今のところ、データの保存は一件ずつ、取得はすべてまとめて行えればよいので、save(MessageBean) メソッドと getAll() メソッドの 2 つだけを持たせました。

5.3.3. MessageDaoOnMemoryImpl

MessageDaoOnMemoryImpl クラスは、全てのデータをメモリ上に保存する MessageDao の実装です。このクラスは Singleton として実装します:

public class MessageDaoOnMemoryImpl implements MessageDao
{
    // 唯一のインスタンス.
    private static final
    MessageDaoOnMemoryImpl instance = new MessageDaoOnMemoryImpl();

    // このクラスのインスタンスを返します.
    public static MessageDaoOnMemoryImpl getInstance()
    {
        return instance;
    }

    // リストの先頭が最も新しいデータ (一番最後に save() されたデータ).
    private List<MessageBean> messages =
        Collections.synchronizedList(new LinkedList<MessageBean>());

    // このクラスは Singleton として実装されています.
    private MessageDaoOnMemoryImpl()
    {
        // BLANK.
    }

    // チャットでの発言を保存します.
    public void save(MessageBean message)
    {
        messages.add(0, message);
    }

    // チャットでの発言データを返します.
    public MessageBean[] getAll()
    {
        return messages.toArray(new MessageBean[messages.size()]);
    }
}

このクラスを利用すると、アプリケーションの終了とともにチャットでの発言データは消えてしまいますが、今回はデータベースを用意する手間を省くため、メモリ上にデータを保持する MessageDao の実装を行いました。

5.4. Tomcat の準備

データベース部分の作成が終わったので、次は Web アプリケーション部分の作成に入りたいところですが、その前に Tomcat の準備を行い、Web アプリケーションを動作させる環境を整えましょう。

ここで行うことは、Tomcat を準備することと、Maven から Tomcat を扱うためのプラグイン tomcat-maven-plugin を導入することです。

5.4.1. Tomcat のインストールと設定

J2EE コンテナである Apache Tomcat は、以下のサイトから入手することができます:

Apache Tomcat

Tomcat をインストールしていない方は、上記サイトから Tomcat を入手し、インストールしてください (ダウンロードページの [Binary Distributions] -> [Core:] から適当なものをダウンロードします)。

インストールが終わったら、Tomcat が動作することを確認しておいてください。また、Tomcat Manager へのアクセス権限を持ったユーザが必要になるので、Tomcat Manager にアクセス可能なユーザが存在しない場合は作成しておいてください。

Tomcat のユーザは、「CATALINA_HOME/conf/tomcat-users.xml」(CATALINA_HOME は Tomcat をインストールしたディレクトリ) を見ることで確認できます。Tomcat Manager にアクセス可能なユーザを追加するには、tomcat-users.xml の tomcat-users 要素の入れ子として「<user username="ユーザ名" password="パスワード" roles="manager">」という設定を追加します。

ここまでの作業を終えたら、Tomcat を実行して、Tomcat Manager にアクセスできることを確認してください。デフォルトでは「http://localhost:8080/manager/html」が Tomcat Manager の URL なので、そこにアクセスし、Tomcat Manager へのアクセス権限を持つユーザ名とパスワードを入力し、無事にログインできるか確認します。

5.4.2. tomcat-maven-plugin の導入

Tomcat のインストールの次は、Maven から Tomcat を操作するためのプラグインである tomcat-maven-plugin を導入しましょう:

tomcat-maven-plugin

tomcat-maven-plugin は Maven のセントラルリポジトリではなく、codehausMaven 2 Plugins ProjectSnapshot Repository で提供されているので、pom.xml でリモートリポジトリの設定を行います:

<project ...>
  ...
  <repositories>
    <repository>
      <releases>
        <enabled>false</enabled>
      </releases>
      <snapshots />
      <id>Maven Snapshots</id>
      <url>http://snapshots.maven.codehaus.org/maven2/</url>
    </repository>
  </repositories>
  ...
  <pluginRepositories>
    <pluginRepository>
      <releases>
        <enabled>false</enabled>
      </releases>
      <snapshots />
      <id>Maven Snapshots</id>
      <url>http://snapshots.maven.codehaus.org/maven2/</url>
    </pluginRepository>
  </pluginRepositories>
  ...
</project>

5.4.3. tomcat-maven-plugin の設定

tomcat-maven-plugin の設定は、pom.xml と settings.xml の 2 箇所を変更する必要があります。

引き続き pom.xml において、tomcat-maven-plugin の設定として、アクセスするサーバの情報を指定します:

<project ...>
  ...
  <build>
    ...
    <plugins>
      ...
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>tomcat-maven-plugin</artifactId>
        <version>1.0-SNAPSHOT</version>
        <configuration>
          <server>tomcat</server>
          <url>http://localhost:8080/manager</url>
        </configuration>
      </plugin>
      ...
    </plugins>
    ...
  </build>
  ...
</project>

project/build/plugins/configuration 要素の入れ子として server 要素と url 要素を指定します。server 要素では、サーバーの識別子として適当な値を指定します。url 要素には Tomcat Manager の URL を指定します。

次に、M2_HOME/conf/settings.xml にサーバーにアクセスするユーザ名やパスワードを指定します:

<settings>
  ...
  <servers>
    ...
    <server>
      <id>tomcat</id>
      <username>admin</username>
      <password>admin</password>
    </server>
    ...
  </servers>
  ...
</settings>

サーバの設定は settings/servers 要素の入れ子として server 要素を追加します。server の子要素には id, username, password などが指定可能です。id 要素には、pom.xml の tomcat-maven-plugin の設定で指定したサーバ識別子 (configuration/server 要素で指定した値) と同じ値を指定します。username と password には Tomcat Manager にアクセス可能なユーザ名と、そのパスワードを指定します。この例ではユーザ名、パスワード共に「admin」として指定していますが、お使いの環境に応じた値を指定してください。

ここまでで tomcat-maven-plugin の設定は終わりです。tomcat-maven-plugin の設定は、リモートリポジトリの設定やサーバーの設定など煩雑なので、よく確認しながら行ってください。以下に変更箇所をまとめます:

  • [pom.xml] リモートリポジトリの設定 (project/repositories/repository と project/pluginRepositories/pluginRepository)
  • [pom.xml] プラグインの設定 (project/build/plugins/plugin)
  • [settings.xml]サーバの設定 (settings/servers/server)

5.4.4. tomcat-maven-plugin の使い方

tomcat-maven-plugin は以下のゴールを持ちます:

ゴール 説明
tomcat:deploy アプリケーション (WAR) を配備する
tomcat:exploded 展開済みの WAR を配備する
tomcat:inplace WAR をその場で配備する
tomcat:list Tomcat に配備されている全てのアプリケーションを一覧する
tomcat:redeploy WAR を再配備する
tomcat:resources JNDI リソースを一覧する
tomcat:roles セキュリティ・ロールを一覧する
tomcat:info Tomcat のバージョン、OS、JVM のプロパティを一覧する
tomcat:sessions アプリケーションのセッション情報を一覧する
tomcat:start アプリケーションを開始する
tomcat:stop アプリケーションを停止する
tomcat:undeploy アプリケーション (WAR) を配備解除する

よく使用するゴールとして tomcat:deploy (配備)、tomcat:undeploy (配備解除)、tomcat:start (アプリケーションの開始)、tomcat:stop (停止) などがありますが、使い方は必要になったときに随時行います。

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp