Maven を利用して SAStruts のプロジェ̊f;トをf5c;成して、DBflute Maven Plugin を用い̅f;開発の流れを説明します。
ここでの説明を進める上で、Maven 2 ま̅f;̆f; 3 のイ0f3;スト0fc;ルをしてお̄f;fc5;要があります。
SAStruts で̆f; Maven Archetype を提f9b;しています。 Archetype を用いることで、mvn コマ0f3;ドを利用して、SAStruts のプロジェ̊f;トをf5c;成することができます。 詳し̄f;̆f;、SAStruts の Maven Archetypeを参照して̄f;ださい。
プロジェ̊f;トのf5c;成̆f; archetype:generate ゴ0fc;ルをֹf;行します。 ̅f;とえば、以下のようにֹf;行します。
$ mvn archetype:generate -DarchetypeRepository=http://maven.seasar.org/maven2/ \ -DarchetypeGroupId=org.seasar.sastruts \ -DarchetypeArtifactId=sa-struts-archetype -DarchetypeVersion=1.0.4-sp9.1 \ -DgroupId=org.example -DartifactId=sample -Dversion=1.0.0-SNAPSHOT \ -Duse-dbflute=true
ֹf;行すると、確認を求める Y が表示されるのでパラメ0fc;̋f;がՔf;題なければ Y を入力します。 BUILD SUCCESS になると、artifactId で指定し̅f;ディレ̊f;トリにプロジェ̊f;トがݑf;成されます。
$ cd sample/ $ find . -type f ./pom.xml ./src/main/java/org/example/action/IndexAction.java ./src/main/webapp/WEB-INf/web.xml ./src/main/webapp/WEB-INf/view/index.jsp ./src/main/webapp/WEB-INf/view/common/footer.jsp ./src/main/webapp/WEB-INf/view/common/header.jsp ./src/main/webapp/WEB-INf/view/common/menu.jsp ./src/main/webapp/WEB-INf/view/common/common.jsp ./src/main/webapp/WEB-INf/view/common/layout.jsp ./src/main/webapp/WEB-INf/struts-config.xml ./src/main/webapp/WEB-INf/validator-rules.xml ./src/main/resources/s2container.dicon ./src/main/resources/env.txt ./src/main/resources/customizer.dicon ./src/main/resources/application.properties ./src/main/resources/application_ja.properties ./src/main/resources/s2jdbc.dicon ./src/main/resources/jdbc.dicon ./src/main/resources/app.dicon ./src/main/resources/env_ut.txt ./src/main/resources/creator.dicon ./src/main/resources/convention.dicon ./src/main/resources/log4j.properties ./.settings/net.sf.amateras.sastruts.prefs ./.tomcatplugin ./.amateras
fc5;要にfdc;じて、pom.xml を編集して̄f;ださい。
Eclipse で読̇f;fbc;めるようにします。
$ mvn eclipse:eclipse -DdownloadSources=true -DdownloadJavadocs=true
ֹf;行することにより、src/main/webapp/WEB-INf/lib/ がff4;新され、fc5;要な jar ファイルが配f6e;されます。 Eclipse でプロジェ̊f;トとしてイ0f3;ポ0fc;トして̄f;ださい。 プロジェ̊f;トにエラ0fc;などが表示される場合̆f;、プロジェ̊f;トをリフレッシュし̅f;f8c;にプロジェ̊f;トをビルドして̄f;ださい。(自動ビルドが設定されていれば̊f;リ0fc;0f3;するとビルドされます)
今回̆f; H2 を利用します。 別なデ0fc;̋f;ベ0fc;スを利用する場合̆f;、この部分をスキップして̄f;ださい。
$ mkdir src/main/webapp/WEB-INf/db $ cd src/main/webapp/WEB-INf/db $ java -jar ../lib/h2-1.3.168.jar
ブラウザが開き、http://localhost:8082/ が表示されます。 表示されない場合̆f;、その URL を表示して̄f;ださい。
JDBC URL を jdbc:h2:sample を入力して、H2 のデ0fc;̋f;ベ0fc;スに接続します。 ドライバ̊f;ラス̆f; org.h2.Driver、ユ0fc;ザ名̆f;sa、パス̎f;0fc;ド̆f;空欄のデフォルト値でՔf;題ありません。 接続ボ̋f;0f3;を押下して、SQLの入力画面を表示します。 今回̆f;以下の単純なテ0fc;ブルをf5c;成します。
CREATE TABLE TEST_TABLE ( ID BIGINT NOT NULL IDENTITY PRIMARY KEY, NAME VARCHAR(255), VALUE INT );
上記を入力して、ֹf;行ボ̋f;0f3;を押下します。 エラ0fc;が表示されていないことを確認し、TEST_TABLEが左側に一覧されていることも確認します。 テ0fc;ブルがf5c;成でき̅f;ら、H2 を終了します。 左上の切断アイコ0f3;を押下するとデ0fc;̋f;ベ0fc;スの接続が切断されます。 ブラウザを閉じても H2 ̆f;終了しないので、̋f;ス̊f;トレイにあるアイコ0f3;から終了を選択して̄f;ださい(EXITメニュ0fc;を選択します)。
プロジェ̊f;トのトップディレ̊f;トリに戻ります。
$ cd ../../../../../
mvn dbflute:download をֹf;行して、DBflute のダウ0f3;ロ0fc;ドします。 DBflute のバ0fc;ジョ0f3;̆f; pom.xml に記ff0;し̅f; dbfluteVersion になります。
$ mvn dbflute:download
mydbflute/dbflute-[バ0fc;ジョ0f3;] がf5c;成され、そこに DBflute が展開されます。
0.9.4.1 以前のバ0fc;ジョ0f3;を利用していて、Unix |fb; OS を利用している場合̆f;、ant のֹf;行権を設定するfc5;要があります。
chmod +x mydbflute/dbflute-[バ0fc;ジョ0f3;]/ant/bin/ant
mvn dbflute:create-client をֹf;行して、DBflute ̊f;ライア0f3;トをݑf;成します。 ֹf;行すると、mydbflute/dbflute-[バ0fc;ジョ0f3;]/etc/client-template/dbflute_dfclient.zip を dbflute_sample ディレ̊f;トリに展開して、pom.xml に記ff0;し̅f;パラメ0fc;̋f;を DBflute ̊f;ライア0f3;トに自動で反映します。
$ mvn dbflute:create-client
mvn dbflute:jdbc をֹf;行して、デ0fc;̋f;ベ0fc;スのスキ0fc;マ情報を取f97;します。 ֹf;行すると、dbflute ディレ̊f;トリの jdbc.[sh|bat] がֹf;行されます。
$ mvn dbflute:jdbc
今回̆f;、デ0fc;̋f;ベ0fc;スのf5c;成の手順でݑf;成し̅f; H2 デ0fc;̋f;ベ0fc;スを参照して、DBflute がֹf;行されます。 [fe;象の DBflute の設定ファイル̆f; dbflute_sample/dfprop/databaseInfoMap.dfprop になります。
mvn dbflute:generate をֹf;行して、デ0fc;̋f;ベ0fc;スにア̊f;セスする DBflute の̊f;ラスを自動ݑf;成します。 ֹf;行すると、dbflute_sample ディレ̊f;トリの generate.[sh|bat] がֹf;行されます。
$ mvn dbflute:generate
今回̆f;、f5c;成し̅f; H2 のデ0fc;̋f;ベ0fc;スの TEST_TABLE ̊f;ラスがݑf;成されます。
DBflute とデ0fc;̋f;ベ0fc;スの情報を dicon ファイルに記ff0;します。
src/main/resources/app.dicon を以下のように記ff0;されているか確認します。 dbflute.dicon が include されているfc5;要があります。
<?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="convention.dicon"/> <include path="aop.dicon"/> <include path="dbflute.dicon"/> <component name="actionMessagesThrowsInterceptor" class="org.seasar.struts.interceptor.ActionMessagesThrowsInterceptor"/> </components>
src/main/resources/jdbc.dicon を以下のように編集します。 デ0fc;̋f;ベ0fc;スの情報を設定します。
<?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"/> <!-- for H2 --> <component name="xaDataSource" class="org.seasar.extension.dbcp.impl.XADataSourceImpl"> <property name="driverClassName"> "org.h2.Driver" </property> <property name="URL"> "jdbc:h2:file:" + container.getComponent(@java.lang.Class@forName("javax.servlet.ServletContext")).getRealPath("/WEB-INf/db/sample") </property> <property name="user">"sa"</property> <property name="password"></property> </component> <component name="connectionPool" class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl"> <property name="timeout">600</property> <property name="maxPoolSize">10</property> <property name="allowLocalTx">true</property> <destroyMethod name="close"/> </component> <component name="DataSource" class="org.seasar.extension.dbcp.impl.DataSourceImpl" /> </components>
その他の dicon ファイル̆f; SAStruts の Maven Archetype で SAStruts 向けにQfa;力されていると思いますが、fc5;要にfdc;じて変ff4;して̄f;ださい。
DBflute Maven Plugin で̆f;、各テ0fc;ブルに関する SAStruts 用のペ0fc;ジを自動ݑf;成することができます。 自動ݑf;成する場合̆f;、以下の手順でֹf;行して̄f;ださい。
CRUD のݑf;成にあ̅f;り、デフォルトの index.jsp が存在しない場合̆f; CRUD のイ0f3;デッ̊f;スペ0fc;ジをݑf;成するので、既存の index.jsp を削除しておきます。
$ rm src/main/webapp/WEB-INf/view/index.jsp
mvn dbflute:generate-crud をֹf;行して、̊f;ラスファイルと JSP を自動ݑf;成します。
$ mvn dbflute:generate-crud
ݑf;成し̅f;ファイルでペ0fc;ジ0f3;グ処理を行う̅f;めに dicon をff4;新します。
src/main/resources/creator.dicon を以下のように編集します。 PagerCreatorをffd;加します。 パッケ0fc;ジ名をカス̋f;マイズしている場合̆f;f75;せて変ff4;して̄f;ださい。
<?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="convention.dicon"/> <include path="customizer.dicon"/> <component class="org.seasar.framework.container.creator.ActionCreator"/> <component class="org.seasar.struts.creator.formCreator"/> <component class="org.seasar.framework.container.creator.ServiceCreator"/> <component class="org.seasar.framework.container.creator.DtoCreator"/> <component class="org.seasar.framework.container.creator.InterceptorCreator"/> <component class="org.example.crud.creator.PagerCreator"/> </components>
src/main/resources/customizer.dicon を以下のように編集します。 pagerCustomizer をffd;加します。
<?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="default-customizer.dicon"/> <component name="actionCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain"> <initMethod name="addAspectCustomizer"> <arg>"aop.traceInterceptor"</arg> </initMethod> <initMethod name="addAspectCustomizer"> <arg>"actionMessagesThrowsInterceptor"</arg> </initMethod> <initMethod name="addCustomizer"> <arg> <component class="org.seasar.framework.container.customizer.TxAttributeCustomizer"/> </arg> </initMethod> <initMethod name="addCustomizer"> <arg> <component class="org.seasar.struts.customizer.ActionCustomizer"/> </arg> </initMethod> </component> <component name="formCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain"> </component> <component name="serviceCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain"> <initMethod name="addAspectCustomizer"> <arg>"aop.traceInterceptor"</arg> </initMethod> <initMethod name="addCustomizer"> <arg> <component class="org.seasar.framework.container.customizer.TxAttributeCustomizer"/> </arg> </initMethod> </component> <component name="pagerCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain"> </component> </components>