T2が楽しそう
seasar connには行けなかったのですが、セッションの資料を見てると、T2が非常に面白そう。
今の時代にあった仕様のフレームワークですね
シルバーウィークを使ってT2+GAE+guice+flex+mavenでアプリを作ろうと思います。
てか前に作ってたタイピングアプリのサーバー側をこれにします。
1.プロジェクト作成
まずEclipseのプロジェクトを作成します。
プロジェクトは、T2のプロジェクトサイトにあったViliを使います。
q4e等でMavenプロジェクトとして作らないのは、
あとからGAEのプロジェクト構成にするのが意外とめんどくさかったからです。
(appengineのjarが1.2.5のものがセントラルリポジトリにまだなかったからでもあります)
Viliをウィザードに従い、「T2プロジェクト for GAE/J」を選択します。
プロジェクト名、ルートパッケージ名(T2でのpageパッケージの親に当たるところ?)、バージョンを設定します。
すると以下のようなGAE+T2のプロジェクトが作成できます。
2.Mavenの設定
つぎはMavenの設定をするため、pom.xmlを作成します。
ただその前に個人的に今までsrcフォルダの直下に
パッケージを置いたことがなかったので何か見た目が気になります。
なのでMaven標準?のsrc/main/java、src/main/resources、
src/test/java、src/test/resourcesを作成し設定します。
このときもともとあったlog4j.properties、
META-INFはsrc/main/resourcesに移動しておきます。
で次に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>jp.stk.gae</groupId> <artifactId>soundtrick</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>soundtrick</name> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.t2framework.web</groupId> <artifactId>t2</artifactId> <version>0.6.1-ga</version> </dependency> <dependency> <groupId>org.t2framework.web</groupId> <artifactId>guiceadapter</artifactId> <version>0.6.1-ga</version> </dependency> <dependency> <groupId>com.google.code.guice</groupId> <artifactId>guice-servlet</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> <!-- <dependency> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-jta_1.1_spec</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-jpa_3.0_spec</artifactId> <version>1.0</version> </dependency> --> </dependencies> <build> <defaultGoal>install</defaultGoal> <outputDirectory>war/WEB-INF/classes</outputDirectory> <testOutputDirectory>target/test-classes</testOutputDirectory> <sourceDirectory>${basedir}/src/main/java</sourceDirectory> <testSourceDirectory> ${basedir}/src/test/java </testSourceDirectory> <scriptSourceDirectory>${basedir}/war</scriptSourceDirectory> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <configuration> <outputDirectory>war/WEB-INF/lib</outputDirectory> <excludeScope>provided</excludeScope> <includeScope>compile</includeScope> <excludeGroupIds> javax.servlet,javax.transaction </excludeGroupIds> <overWriteReleases>false</overWriteReleases> <overWriteSnapshots>true</overWriteSnapshots> <overWriteIfNewer>true</overWriteIfNewer> </configuration> <executions> <execution> <phase>process-resources</phase> <goals> <goal>copy-dependencies</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <warSourceDirectory>war</warSourceDirectory> </configuration> </plugin> <plugin> <!-- http://www.datanucleus.org/products/accessplatform/enhancer.html#maven2 --> <groupId>org.datanucleus</groupId> <artifactId>maven-datanucleus-plugin</artifactId> <version>1.1.0</version> <configuration> <verbose>true</verbose> <mappingIncludes>**/*.class</mappingIncludes> <fork>false</fork> <enhancerName>ASM</enhancerName> <api>JDO</api> <jdkLogConfiguration> war/WEB-INF/logging.properties </jdkLogConfiguration> </configuration> <executions> <execution> <phase>compile</phase> <goals> <goal>enhance</goal> </goals> </execution> </executions> </plugin> </plugins> <pluginManagement> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <encoding>UTF-8</encoding> <source>1.6</source> <target>1.6</target> </configuration> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>2.0</version> <configuration> <warSourceDirectory> ${basedir}/war </warSourceDirectory> <warSourceExcludes> .*,.*/,target/,work/,pom.xml,war/WEB-INF/classes/**/*.class,war/WEB-INF/lib/ </warSourceExcludes> <!-- <webResources> <resource> <directory> ${basedir}/target/generated-resources </directory> </resource> </webResources> --> <archive> <manifest> <mainClass> org.t2framework.executablewar.Main </mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </pluginManagement> </build> <repositories> <repository> <id>jpox</id> <url>http://www.jpox.org/downloads/maven2</url> </repository> <repository> <id>DataNucleus</id> <url>http://www.datanucleus.org/downloads/maven2</url> </repository> <repository> <id>DataNucleus_Nightly_Repos</id> <url> http://www.datanucleus.org/downloads/maven-nightly </url> <layout>legacy</layout> </repository> <repository> <id>mvnsearch</id> <url>http://www.mvnsearch.org/maven2</url> </repository> <repository> <id>maven.t2framework.org</id> <name>The T2 Project Maven2 Repository</name> <url>http://maven.t2framework.org/maven2</url> </repository> <repository> <id>maven-snapshot.t2framework.org</id> <url>http://maven.t2framework.org/maven2-snapshot</url> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <distributionManagement> <repository> <uniqueVersion>false</uniqueVersion> <id>maven.t2framework.org</id> <name>The T2 Project Maven2 Repository</name> <url>dav:http://maven.t2framework.org/maven2</url> </repository> <snapshotRepository> <uniqueVersion>true</uniqueVersion> <id>maven.t2framework.org</id> <name>The T2 Project Maven2 Snapshot Repository</name> <url>dav:http://maven.t2framework.org/maven2-snapshot</url> </snapshotRepository> </distributionManagement> <pluginRepositories> <pluginRepository> <id>DataNucleus</id> <url>http://www.datanucleus.org/downloads/maven2</url> </pluginRepository> </pluginRepositories> </project>
もともと現在リリースされているViliだとT2のVer0.6対応なので
その辺のバージョンもあげておきます。
細かいところが間違っていたらすいません。
大事なのは、maven-dependency-pluginの
outputDirectoryがwar/WEB-INF/libになっているらへんです。
こうしないとGAEのローカルサーバが見てくれません。
あとはmvn clean eclipse:eclipse dependency:copy-dependenciesコマンドで
ライブラリを落としてくればOKです。
ちなみにcleanゴールで実行すると、appengine周りのライブラリが消えるので、
プロジェクトを選択し、「プロパティ」→「Google」→「App Engine」から
「Use Google App Engine」を一度外し、再度つけてください。
3.Guiceの設定
次にGuiceの設定です。
Viliでプロジェクトを作成すると、web.xmlも自動で作成してくれるので、
これにGuiceの設定を入れていきます。
<?xml version="1.0"?> <web-app id="t2-test" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <context-param> <param-name>t2.encoding</param-name> <param-value>UTF-8</param-value> </context-param> <filter> <filter-name>Guice Servlet Filter</filter-name> <filter-class> com.google.inject.servlet.GuiceFilter </filter-class> </filter> <filter> <filter-name>t2</filter-name> <filter-class>org.t2framework.t2.filter.T2Filter</filter-class> <init-param> <param-name>t2.rootpackage</param-name> <param-value>jp.stk.gae.page</param-value> </init-param> <init-param> <param-name>t2.container.adapter</param-name> <param-value> org.t2framework.t2.adapter.GuiceAdapter </param-value> </init-param> <init-param> <param-name>t2.exclude-resources</param-name> <param-value>css, js, png, gif, jpg</param-value> </init-param> </filter> <filter-mapping> <filter-name>Guice Servlet Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>t2</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <!-- <dispatcher>INCLUDE</dispatcher> <dispatcher>ERROR</dispatcher> --> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <jsp-config> <jsp-property-group> <url-pattern>*.jsp</url-pattern> <el-ignored>false</el-ignored> <page-encoding>UTF-8</page-encoding> <scripting-invalid>false</scripting-invalid> <!-- <include-prelude>/WEB-INF/pages/common.jsp</include-prelude> --> <!-- trim white spaces (JSP 2.1 or higher) <trim-directive-whitespaces>true</trim-directive-whitespaces> --> </jsp-property-group> </jsp-config> </web-app>
T2Filterのt2.container.adapterにorg.t2framework.t2.adapter.GuiceAdapterを設定し、
T2Filterの前にGuiceFilterを設定します。
4.GuiceModuleの設定
META-INFにservices/com.google.inject.Moduleを作成し、
読み込むModuleを作成します。
ここではT2のGuiceサンプルにあった、ApplicationModule.javaを作成します。
package jp.stk.gae.module; import jp.stk.gae.plugin.PagePluginImpl; import org.t2framework.t2.plugin.Plugin; import com.google.inject.AbstractModule; import com.google.inject.servlet.ServletModule; public class ApplicationModule extends AbstractModule { @Override protected void configure() { install(new ServletModule()); } }
そしてこのModuleを読み込んでもらうために、
com.google.inject.ModuleにこのModuleのフル
クラスパスを書きます。(jp.stk.gae.module.ApplicationModule )
とりあえず今日はここまでです。
あとはT2Pluginを設定したり、AOP設定したり、いろいろやってみます。