簡単なサンプルを試してみる

Maven2でWTP2.0対応のWebアプリのプロジェクトを生成し、SAStrutsのサンプルを
のっけてみて、でついでにエラーをResourceSynchronizerで表示させるメモ。

http://d.hatena.ne.jp/higayasuo/20080214
http://d.hatena.ne.jp/taichitaichi/20080211/1202759047

つうかスゲー。

まず環境は下記のとおり。

maven 2.0.8
Eclipse eclipse-jee-europa-fall2-win32
JDK jdk1.5.0_09
Seasar 2.4.22
SAStruts 1.0.1-rc2
ResourceSynchronizer 0.0.5

最初にプロジェクトを作成

mvn -U archetype:create

で18のmaven-archetype-webappを選択し、

groupId sample
artifactId sa-struts-sample
version 1.0
package sample

とする。

で、キーとなってくる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>sample</groupId>
  <artifactId>sa-struts-sample</artifactId>
  <packaging>war</packaging>
  <version>1.0.0</version>
  <name>sa-struts-sample Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <repositories>
    <repository>
      <id>maven.seasar.org</id>
      <name>The Seasar Foundation Maven2 Repository</name>
      <url>http://maven.seasar.org/maven2</url>
    </repository>
  </repositories>
  <dependencies>
    <dependency>
      <groupId>org.seasar.sastruts</groupId>
      <artifactId>sa-struts</artifactId>
      <version>1.0.1-rc2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-j2ee_1.4_spec</artifactId>
      <version>1.0</version>
      <type>jar</type>
    </dependency>
    <dependency>
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-ejb_3.0_spec</artifactId>
      <version>1.0</version>
      <type>jar</type>
    </dependency>
    <dependency>
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-jta_1.1_spec</artifactId>
      <version>1.0</version>
      <type>jar</type>
    </dependency>
    <dependency>
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-jpa_3.0_spec</artifactId>
      <version>1.0</version>
      <type>jar</type>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.1.2</version>
      <type>jar</type>
    </dependency>
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
      <type>jar</type>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-eclipse-plugin</artifactId>
        <version>2.5-SNAPSHOT</version>
        <configuration>
          <downloadSources>true</downloadSources>
          <wtpversion>2.0</wtpversion>
        </configuration>
      </plugin>
    </plugins>
    <finalName>sa-struts-sample</finalName>
  </build>
  <pluginRepositories>
    <pluginRepository>
      <id>people.apache.org m2-snapshot</id>
      <url>http://people.apache.org/repo/m2-snapshot-repository</url>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
      <releases>
        <enabled>false</enabled>
      </releases>
    </pluginRepository>
  </pluginRepositories>
</project>

で、

mvn eclipse:eclipse

とする。

geronimojstlのscopeをprovidedにしてないのは、providedにするとclasspathに含まれず、
あとでWTPで実行する際にNoClassDefFoundErrorになるため。

上記のようにやっておけば、

Eclipseプロジェクト配下にjarファイルが無くても(M2_REPO側にある状態で)、WTPTomcatを起動するとclasspathに含まれた状態になります。

http://manhole.tdder.com/diary/20061028.html

なので、WTPで無事実行できました。もっとうまい方法があると思うのですが、とりあえずこれでお茶を濁しときます。^^);

動くサンプルとして、sa-struts-tutorial-1.0.0からlogin.jsp,welcome.jsp,LoginAction.javaやdiconファイル関連を持ってくる。

今回DBは使わないので、s2jdbc.diconやtest.scriptをはずす。

src/main/resources以下にあるファイルは下記のとおり。

  • app.dicon
  • application.properties
  • application_ja.properties
  • convention.dicon
  • creator.dicon
  • customizer.dicon
  • env.txt
  • jdbc.dicon
  • log4j.properties
  • s2container.dicon

app.diconは

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
	"http://www.seasar.org/dtd/components24.dtd">
<components>
	<include path="aop.dicon"/>
	<include path="j2ee.dicon"/>
	<component name="actionMessagesThrowsInterceptor" class="org.seasar.struts.interceptor.ActionMessagesThrowsInterceptor"/>
</components>

sa-struts-tutorialではapp.diconにconvention.diconをincludeしてたけど、これはいるのかな。
creator.diconの方でincludeしてるからいらないような。。。

jdbc.diconは、

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
	"http://www.seasar.org/dtd/components21.dtd">
<components namespace="jdbc">
	<include path="jta.dicon"/>
</components>

で、
http://localhost:8080/sa-struts-sample/login/
にアクセスすればOK.

で、次に、ResourceSynchronizerで/src/main/webapp/error以下にdebug.jspを作成する。

そのままだとパスがおかしくなるので、debug.jspの2行目を

static final String ERROR_SCREEN_PATH = "/error";

とする。

LoginAction.javaでヌルポがでるようにしてから、アクセスすると、下記のようになる。

ちなみに、
http://localhost:8080/sa-struts-sample/s2container?command=list
にアクセスした場合は、下記のようになる。loginActionが登録されていることがわかる。