Working Effectively With Legacy Code

このエントリを見て、俄然読みたくなりました。

Working Effectively With Legacy Code 読書会が実現に向けて動き出しました - t-wada の日記(旧)

TDDラブな私ですが、不勉強でこんな本があるの知りませんでした。
早速Amazonに注文してしまいました。

私自身、Javaのスパゲッティーコードに悩まされてきたので、本が届くのが楽しみです。

Working Effectively With Legacy Code

Working Effectively With Legacy Code

SAStruts + Velocity (1)

先日SAStrutsセミナーを受けてきました。

 http://d.hatena.ne.jp/morningmist7/20080415/1208222633

このセミナーをきっかけにSAStrutsを勉強しはじめたのですが、
私の現場ではStruts+Velocityで開発を行っているので、SAStruts
Velocityが連携できるか調査しました。

必要なモジュールのダウンロード

 sa-struts-blank-1.0.2-rc2.zip
 velocity-tools-1.2.zip

必要なファイルのマージ

 まず、sa-struts-blank-1.0.2-rc2.zipを展開します。
 次に、velocity-tools-1.2.zipの中にある以下のファイルを追加して行きます。

  commons-digester-1.7.jar
  commons-lang-2.1.jar
  sslext-1.2.jar
  velocity-1.4.jar
  velocity-tools-1.2.jar
  velocity-tools-generic-1.2.jar
  velocity-tools-view-1.2.jar
  webapp/WEB-INF/web.xml
  webapp/WEB-INF/toolbox.xml
  webapp/WEB-INF/VM_global_library.vm
  webapp/WEB-INF/velocity.properties

 sa-struts-blank-1.0.2-rc2の中にある以下のファイルは削除します。

  commons-digester-1.6.jar

設定の修正

webapp/WEB-INF/web.xml の修正

 →以下の記述を追加

  <servlet>
    <servlet-name>velocity</servlet-name>
    <servlet-class>org.apache.velocity.tools.view.servlet.VelocityViewServlet</servlet-class>
    <init-param>
      <param-name>org.apache.velocity.toolbox</param-name>
      <param-value>/WEB-INF/toolbox.xml</param-value>
    </init-param>
    <init-param>
      <param-name>org.apache.velocity.properties</param-name>
      <param-value>/WEB-INF/velocity.properties</param-value>
    </init-param>
    <load-on-startup>10</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>velocity</servlet-name>
    <url-pattern>*.vm</url-pattern>
  </servlet-mapping>
webapp/WEB-INF/toolbox.xml の修正

→以下の記述を追加

  <tool>
    <key>escape</key>
    <scope>application</scope>
    <class>org.apache.velocity.tools.generic.EscapeTool</class>
  </tool>
webapp/WEB-INF/velocity.properties の修正

→以下の記述を追加・修正

input.encoding=UTF-8
output.encoding=UTF-8
default.contentType=text/html; charset=UTF-8

webapp.resource.loader.cache = false
velocimacro.library = WEB-INF/VM_global_library.vm

サンプルの作成

 sa-struts-tutorial-1.0.2-rc2 に含まれるaddサンプルをVelocityに移植して動作確認を行います。

まず、Actionクラスを作成。

package tutorial.action;

import org.seasar.struts.annotation.Execute;
import org.seasar.struts.annotation.IntegerType;
import org.seasar.struts.annotation.Required;

public class AddAction {

	@Required
	@IntegerType
	public String arg1;

	@Required
	@IntegerType
	public String arg2;

	public Integer result;

	@Execute(validator = false)
	public String index() {
		return "add.vm";
	}

	@Execute(input = "add.vm")
	public String submit() {
		result = Integer.valueOf(arg1) + Integer.valueOf(arg2);
		return "add.vm";
	}
}

次に、vmファイルを作成。

<html>
<head>
  <title>Velocity</title>
  <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
</head>
<body>
  #errorMarkup()
  <form name="velocityActionForm" method="post" action="$link.setRelative("/add/")">
    <input type="text" name="arg1" value="$!arg1"> + <input type="text" name="arg2" value="$!arg2"> = $!escape.html($!result)<br />
    <input type="submit" name="add" value="足し算">
  </form>
</body>
</html>

動作確認

 とりあえず、うまく動いているようです。
 ただし、vmファイルの修正を動的に検知してくれない時があります。
 何か設定が必要なんでしょうか?