アーカイブ

2009 年 10 月 のアーカイブ

GAE/J (Google App Engine for Java) で Apache Velocityを動かす

2009 年 10 月 31 日 tdtsh コメントはありません

GAE/J で Apache Velocity は動く

わたしにとってGAE/Jをガンガン使えるか否かは、Apache Velocityが動くかどうかに強く依存しています。
他のテンプレートエンジンを触ったことないし、JSPは絶対イヤだからです。

Will it play in App Engine – Google App Engine for Java | Google GroupsにはVelocityのことは書かれていてない(2009年10月30日現在)。

結論から言うとGAE/JでVelocityは動きます。すでに動かしちゃってる先人の方もいらっしゃる様です。
ちょっと安心です。

GAEにデプロイしたサンプルはこちら
http://tdtsh-blog.appspot.com/velocity/top.vm


インストール手順

今個人的に使っているのは、velocity-1.4 と velocity-tools-1.1 なんですが、この際だから最新にしちゃいます。
Downloads – Apache Velocity Siteから、

velocity-1.6.2.zip
velocity-tools-1.4.zip

をダウンロードします。

ダウンロードした2つのzipをローカルのどっかに解凍します。

解凍したディレクトリから、jarファイルを、eclipseのプロジェクトのwar/WEB-INF/lib/にコピーします。

velocity-1.6.2\velocity-1.6.2.jar
velocity-tools-1.4\lib\velocity-tools-1.4.jar

ここまでで実行すると、依存性が解決できずに (org.apache.commons達) Exceptionはきまくりでした。
細かい依存性の管理については後回しにして、velocity-tools-1.4\lib\ の下の、commons-* を片っ端からeclipseのプロジェクトのwar/WEB-INF/lib/にコピーしました。

こいつらです。
commons-beanutils-1.7.0.jar
commons-chain-1.1.jar
commons-collections-3.2.jar
commons-digester-1.8.jar
commons-lang-2.2.jar
commons-logging-1.1.jar
commons-validator-1.3.1.jar

最終的に、依存性は maven で管理したいなぁ、と思います。


動かしてみる

先ずは、クラス my.package.VelocityServlet として、org.apache.velocity.tools.view.servlet.VelocityViewServlet を拡張してクラスを作ります。とりあえずは何も実装しなくていいです。

war/WEB-INF/web.xmlを修正して、こんな感じにしました。

<servlet>
	<servlet-name>velocity</servlet-name>
	<servlet-class>
		my.package.VelocityServlet
	</servlet-class>
</servlet>

<servlet-mapping>
	<servlet-name>velocity</servlet-name>
	<url-pattern>/velocity/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
	<servlet-name>velocity</servlet-name>
	<url-pattern>*.vm</url-pattern>
</servlet-mapping>

それから、VMファイルはサーブレットからアクセス出来る必要があるので、war/WEB-INF/appengine-web.xmlを修正して、リソースファイルとして設定しておきます。今回はこんな感じにしました。

<resource-files>
	<include path="/velocity/*" />
</resource-files>

war/velocityディレクトリを作成し、その中に test.vm ファイルを作成します。
中身はなんでもいいんですが、簡単にテストする方法としては、VTLでのコメントを書けばいいです。

<html>
<body>
	<h1>Test VelocityServlet</h1>
	## if you see this message, VelocityViewServlet might not work.
</body>
</html>

http://localhost:8080/velocity/test.vm にアクセスします。

404エラーや500エラーなら、何かの設定が間違っています。
if you see… が表示されたなら、静的ファイルとして読まれているかもしれません。
(VelocityViewServletがリクエストを正しく処理していれば、if you see… の部分は見えません)

今回は、VM_global_library.vm とか velocity.properties のことには触れていないけど、リソースファイルとして配備すればもちろん使えます。encodingをきちんと設定すれば、日本語もちゃんと使えます。

カテゴリー: Google App Engine, eclipse, java, クラウド タグ:

GAE (Google App Engine) SDK for Javaで ログの取得

2009 年 10 月 30 日 tdtsh コメントはありません

Google App Engineのログは、WEB上( appengine.google.com のLogs )で見る事も出来るけど、デバッグにはイマイチ使いにくいですね。
GAE SDK for Java を使えば、ログをダウンロード出来ます。

インストール手順はこちらを参照。(Windows XPです)

cd %GAE_HOME%

bin\appcfg.cmd –severity=0 request_logs “c:\Documents and Settings\myname\workspace\myapp\war” .\request.log

severityでログレベルを指定する
4 は「CRITICAL(致命的)」
3 は「ERROR(エラー)」
2 は「WARNING(警告)」
1 は「INFO(情報)」(デフォルト)
0 は「DEBUG(デバッグ)」

サーバにSSHでログインして、ログファイルを tail -f しちゃうのがデフォルトになっちゃっているので、やっぱり不便だなぁ。

参考サイト

Java アプリケーションのアップロードと管理 – Google Code

カテゴリー: Google App Engine, java, クラウド タグ:

GAE SDK for Java で update 時にcannot find javac executable based on java.home

2009 年 10 月 29 日 tdtsh コメントはありません

※開発機はWindows XPです。

Google App Engine SDK for javaを使って、コマンドラインでデプロイしようと

bin\appcfg.cmd update .\war

すると、javac.exeが見つからないと怒られた。

java.lang.IllegalStateException: cannot find javac executable based on java.home, tried “C:\Program Files\Java\jre6\bin\ javac.exe” and “C:\Program Files\Java\bin\javac.exe”

これに対する対処法は、Google App Engine SDK for java のインストールディレクトリにある、bin/appcfg.cmdを編集し、

	@java -cp .....

	@"%JAVA_HOME%\bin\java" -cp ...

に書き換えれば良い。

“でくくっているのは、JDKのインストール先にスペースが含まれる( c:\Program Files )から。

参考サイト

Issue 1226: appcfg cannot find javac – Project Hosting on Google Code

カテゴリー: Google App Engine, java, クラウド タグ:

Google App Engine SDK for java でデプロイ

2009 年 10 月 28 日 tdtsh コメントはありません

前回インストールした、Google App Engine SDK for javaを使って、コマンドラインでデプロイしてみる。

参考サイトの例に応用をきかせて、今回は SDKとは別ディレクトリに存在する Eclipseのワークスペース上のWARディレクトリを、デプロイします。

※開発機はWindows XPです。

cd %GAE_HOME%

bin\appcfg.cmd update “c:\Documents and Settings\myname\workspace\myapp\war” –sdk_root=”c:\Documents and Settings\myname\workspace\myapp”

Email: と聞かれるので、GAEアカウントのメールアドレスを入力。

Password for xxxx@gmail.com: と聞かれるので、GAEアカウントのパスワードを入力。

・・・う~ん、ちょっとめんどくさい。
このへんは最終的には Antタスクでやるつもり。

バッチ化して開発者(WEBデザイナ含む)に配布出来ないかな、と思ってはみたものの、やはり使いやすさ・説明のし易さ共にeclipseに軍配があがりますね。

参考サイト

アプリケーションのアップロード – Google Code

カテゴリー: Google App Engine, eclipse, java, クラウド タグ:

SQL Server 2000 (2005, 2008でも多分可)でインデックスの再構築

2009 年 10 月 27 日 tdtsh コメントはありません

SQL Server 2000時代に、インデックスの再構築といえば

dbcc dbreindex

でしたが、このコマンドは将来なくなる様ですね。
かわりに、alter index rebuild を使えとの事。
rebuild句が、dbreindexと同じ機能です。
all on を指定しないと、非クラスタ化インデックスは再構築されないそうな。

alter index all on テーブル名 rebuild

参考サイトを元に、新たなストアドを作った。

USE MASTER
GO

create procedure sp_reindex as

DECLARE @tablename varchar(30)

DECLARE tables CURSOR FOR
SELECT name FROM sysobjects WHERE type = 'U'
OPEN tables

FETCH NEXT FROM tables INTO @tablename
WHILE (@@fetch_status <> -1)
BEGIN
	Execute ('ALTER INDEX ALL ON' + @tablename + ' REBUILD')
	FETCH NEXT FROM tables INTO @tablename
END
DEALLOCATE tables
GO

USE YOUR_DATABASE
exec SP_REINDEX
カテゴリー: sqlserver タグ: