2008/03/31

rubyのgem自身アップグレード

gem update --system

Tomcat5.5のログ設定

Tomcat5.5ではデフォルトのログ出力機能はlog4jからJDKのjava.util.loggingを利用するように変更された。
log4jのほうが出力フォーマットの設定等柔軟に変更できるのでlog4jにログ出力を統一しようと思ったら以下のことをやらなければならない。
①${tomcat.home}/common/libにcommons-logginとlog4jのライブラリをおく。

②${tomcat.home}/common/classesにlog4j.xmlをおく

2008/03/19

JavaのMessageFormat.formatメソッドについて

変換対象の文字列に「{」や「'」が含まれている場合は
以下のように「'{'」や「''」とする。

String s = "function aaa() '{' alert(''{0}''); '}' ";

結構はまりどころ。

Prototypeでのブラウザ判別


if (Prototype.Browser.IE6)
alert('You are using IE6');
else if (Prototype.Browser.IE)
alert('You are using IE7');
else
alert('Not IE');

2008/03/13

cayenneでPKを指定してデータを取得する時のはまりどころ

cayenneではDataObjectUtils.objectForPKによってPKを指定してデータを取得できるが
このメソッドはデフォルトでキャッシュしてしまう。なので以下のメソッドを利用しましょう。

ObjectIdQuery query = new ObjectIdQuery(new ObjectId(AAAA.class.getSimpleName(), AAAA.ID_PK_COLUMN, id), false, ObjectIdQuery.CACHE_REFRESH);
(AAAA)DataObjectUtils.objectForQuery(dataContext, query);

ここでポイントはCACHE_REFRESH を指定して常に新しい情報を取得していること。
これを指定しないとだめ
pgpoolでロードバランサ機能を利用する場合、トランザクション内のSELECTでないことが条件の一つにあげられるがCayenneではデフォルトでトランザクションを開始してしまう。

そこでトランザクションを開始させない方法は以下

try {
// トランザクションは実行しない
Transaction.bindThreadTransaction(Transaction.noTransaction());

// なんらかのクエリを発行
}
finally {
// 元にもどす
Transaction.bindThreadTransaction(null);
}