簡単なサンプルを試してみる
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>
で、
とする。
geronimoやjstlのscopeをprovidedにしてないのは、providedにするとclasspathに含まれず、
あとでWTPで実行する際にNoClassDefFoundErrorになるため。
上記のようにやっておけば、
Eclipseプロジェクト配下にjarファイルが無くても(M2_REPO側にある状態で)、WTPでTomcatを起動すると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が登録されていることがわかる。