2007-07-30

Gentooで Java VMを選択する

java-config -L

で、インストールされている Java VMの一覧が出る。
システムのデフォルトVMをセットするには下記のようにする。

java-config -S sun-jdk-1.5

2007-07-26

Accessから SQL Serverへ

SQL文書いてテーブルつくるのかったりーや。

という人は Accessでテーブルデザインやテストデータを作って SSMA( SQL Server Migration Assistant) for Access で SQL Serverにマイグレーションしてやろう。

SSMA For Access

動作させるのには .NET Framework 2.0と Visual J# 2.0のランタイムがいる。
あと、MSのサイトでライセンスファイルを取得する必要がある。登録するだけで費用はかからない。

実はAccess自体にも「アップサイジングウィザード」なる SQL Server移行支援ツールが内蔵されているのだけど、うちの Access2000で試したら「オーバーフローしました」という主語のない意味不明のエラーメッセージが出て使えなかった。

2007-07-25

RedHatにJBossをインストールする

Community版 JBossはここからダウンロードする。
http://labs.jboss.com/jbossas/downloads

ダウンロードした JBossのアーカイブを展開して /usr/local に移動、/usr/local/jbossになるようにシンボリックリンクを張る。

ユーザー jbossを作成し、chown -R jboss /usr/local/jboss/

/etc/init.d/ へ移動し、/usr/local/jboss/bin/jboss_init_redhat.sh へのシンボリックリンクを jboss という名前で作成

root権限で /etc/init.d/jboss start を実行すると JBossが起動する。

OSの起動時に JBossも自動で起動するには /etc/rc3.d に /etc/init.d/jboss のシンボリックリンクを S99jboss のような名前で作成する。(99は優先順位なので、他のサービスとのかねあいで変えて良い)

Preferences Editor

サーバーサイドJavaアプリケーションを作るとき、開発環境と本番環境で異なる設定を用いて動かしたいというのはよくあること。
ありがちなソリューションと問題点はこんなかんじ。

1)"なんとか.properties" に書いてアプリケーションと一緒に配置→ jarなりwarなりにパッケージングしてしまうと書き換えられない
2)"なんとか.properties" ファイルをアプリケーションの外に配置→そのファイルの置き場所はどこで設定すんのさ
3)Springの beans.xmlに書く→1)と同じ問題
4)3に加え、PropertyPlaceholderConfigurerで設定を "なんとか.properties"に切り出す→1)と同じ問題

特に2、staticコンストラクタで固定位置のpropertiesファイルを読みに行くような作りになってるBeanとか勘弁してもらえる?(実在した)

というわけで、

5)Java1.4で追加されたプリファレンスAPIで設定の読み書きをする

というのをやってみてもいいだろう。プリファレンスAPIとは、Windowsでいうところのレジストリみたいなものを読み書きできるAPIだ。これだと設定ファイルの置き場所をどこにするかなんていう悩みはなくなるわけね。
Springを使っているなら PropertyPlaceholderConfigurerのかわりに PreferencesPlaceholderConfigurerというのを使えば、${foo.bar}みたいな記述をした際にまずはプリファレンスの foo.barを探し、存在しなければ propertiesファイルに書いてある foo.barを使うといった動作をしてくれる。これならpropertiesファイルに設定を書いてパッケージングしてしまった後でもプリファレンスの編集で設定をオーバーライドできるわけだね。

ところがWindowsのレジストリエディタみたいなものが Java SDKには標準で付属していない。
仕方ないので探してみたら下記のようなものをみつけた。

http://sourceforge.net/projects/prefedit/

prefedit-*.jar(実行可能jar)を起動するとGUIでプリファレンスの編集ができる。

mod_cband.so で Apache2の帯域制限

クローラーを使って帯域やCPUに負荷をかける人がいる場合、mod_cbandを使って制限できる。

以下、gentooで mod_cbandを使うやりかた。

emerge mod_cband

/conf.d/apache2 を編集し APACHE2_OPTSに -D CBANDを追加

あとはバーチャルホスト定義の中に
CBandRemoteSpeed 100kb/s 3 3

と書けば、1クライアントあたりの転送速度を秒間 100キロバイトにシェープしたうえに、秒間リクエスト数と同時接続数をそれぞれ3に制限できる。
(制限された秒間リクエスト数・同時接続数を超えるとクライアントには 503が返る)

こういうことをするのに世間では mod_throttleというのが有名なようだけど Apache 2に対応していないし Portageにも入っていない模様。

2007-07-24

SQL Server 2005 JDBC Driver とPlatformTransactionManager

Microsoft SQL Server 2005と Springのトランザクションマネージャを組み合わせて使っていたら、2回目以降のトランザクションを実行したときに

com.microsoft.sqlserver.jdbc.SQLServerException: COMMIT TRANSACTION 要求に対応する BEGIN TRANSACTION がありません。

という例外が出る。しばらく悩んだが、JDBCドライバのバージョンを1.0から 1.1に更新したら直った。
多分autocommit設定を正しく返さないというバグのせいだろう。
リリースノートを見る限り、他にも1.0はバグ山盛りなので sqljdbc.jar が古いかもと思ったあなたには差し替えをお勧めする。

Microsoft SQL Server 2005 JDBC Driver 1.1

2007-07-08

Homeエディションとダイナミックディスク

Vistaの(XPもそうだと思うけど) Homeエディションは、ダイナミックディスクを認識できない。
ストライプやミラーを組んだボリュームが読み書きできない。

ハメられた!

Ultimateにオンラインでアップグレードすれば解決しそうだけど、2万円もする。高い!