5.0.6

長いことほったらかしにしてしまいました。5.0.6も出たことだし、頑張って再開しようと思います。
とりあえず、今作ってるものを昨日5.0.6にアップグレードしたので、5.0.5から5.0.6にアップグレードする手順を書きます。

pom.xml内のTapestryバージョンを5.0.6に書き換える
  <properties>
    <tapestry-release-version>5.0.6</tapestry-release-version>
  </properties>
テンプレートファイルの拡張子を.htmlから.tmlに変更する

MacOSXLinuxなどでSubversionを使ってるなら、次のようなコマンドでやると楽でしょう。

find . -type f -name '*.html' | while read file; do svn move $file ${file%html}tml; done

Windowsでは次のコマンドでできるらしい(未確認、MLより)

FOR /R %A in (*.html) do svn rename %~pnA.html %~pnA.tml
テンプレートファイルをWEB-INF以下からコンテキストルートに移動する

拡張子の変更とあわせると、例えば myapp/WEB-INF/Start.html にあったテンプレートは myapp/Start.tml とします。

myapp/src/main/resources 以下にテンプレートを置いている場合は移動する必要はないようです(拡張子の変更は必要)。私はこちらに置く方が好きです。EclipseのPackageExplorerで見たときに見やすいので。

@Injectアノテーションの修正

tapestry-coreの@Injectアノテーションは廃止されてtapestry-iocの@Injectに統合されました。
org.apache.tapestry.annotations.Inject をインポートしている箇所はコンパイルエラーになるので、org.apache.tapestry.ioc.annotations.Inject に修正します。

AppModule.javaの修正

ロギングライブラリがcommons-loggingからSLF4jに変わりました。
そのため、AppModule.javaのbuildTimingFilterメソッドの引数の型を Log から Logger に変更し、それにあわせてimport文も修正します。

public RequestFilter buildTimingFilter(final Logger log) {
-import org.apache.commons.logging.Log;
+import org.slf4j.Logger;
jettyのlog4jも1.2.14にする

最初のpom.xmlの修正でmavenの依存関係としてはlog4j-1.2.14.jarを参照するようになりますが、jettyの方で古いlog4jを使っている場合は jetty/ext 内にあるlog4jlog4j-1.2.14.jarに置き換える必要があります。これをしないと実行時に次のエラーが発生します。

HTTP ERROR: 500

org.apache.log4j.Logger.isTraceEnabled()Z

RequestURI=/myapp/

Powered by Jetty://


以上がだいたい必須になるだろう手順です。以下は私が気づいた範囲で必要に応じてやる内容。

@InjectComponentは@InjectContainerに変わりました

Mixinで @InjectComponent アノテーションを使っている場合 @InjectContainer に書き換える必要があります。

ComponentResourcesのgetLogメソッドはgetLoggerにメソッド名が変わりました
PageRenderSupportインターフェース, Linkインターフェースにメソッドが追加されました

これらの実装を置き換えたりとかしている場合は、新しいメソッドの実装を加える必要があります。


とりあえず、こんなところで私のプロジェクトは5.0.6に問題無くアップグレードできたようです。