2008/06/04

VBSでUNICDEの全角文字数を判断する関数


' UNICODEでも全角半角の文字数を判断するメソッド
Function LenByte(ByVal s)

Dim c, i, k

c = 0

For i = 0 To Len(s) - 1

k = Mid(s, i + 1, 1)

If (Asc(k) And &HFF00) = 0 Then

c = c + 1

Else

c = c + 2

End If

Next

LenByte = c

End Function

2008/05/27

cayenne+pgpoolではまりどころ

以前、pgpoolをcayenneで利用する為について記載した。
しかし、pgpoolやjndiで再接続機能を利用する為には更に工夫が必要だ。


以下のようにTransactionクラスを継承したクラスを作成する。


import java.sql.Connection;
import java.sql.SQLException;
import java.util.Iterator;

import org.apache.cayenne.CayenneException;
import org.apache.cayenne.access.Transaction;

public class NoTransaction extends Transaction {

@Override
public void begin() {
}

@Override
public void commit() throws IllegalStateException, SQLException, CayenneException {
close();
}

@Override
public void rollback() throws IllegalStateException, SQLException, CayenneException {
close();
}

protected void close() {

if (connections == null || connections.isEmpty()) {
return;
}

Iterator it = connections.values().iterator();
while (it.hasNext()) {
try {

((Connection) it.next()).close();
}
catch (Throwable th) {
}
}

}

}


そしてSQLを実行する部分をトランザクションしないよう以下のようにする。


Transaction tx = new NoTransaction();
try {

Transaction.bindThreadTransaction(tx);

Expression expression = ExpressionFactory.matchExp(~);
SelectQuery query = new SelectQuery(Ent.class, expression);
List entList = getDataContext().performQuery(query);
if (CollectionUtils.isEmpty(entList))
return null;

return entList;

}
finally {
try {
tx.commit();
} catch (Exception e) {

}
}

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 を指定して常に新しい情報を取得していること。
これを指定しないとだめ