Winstoneでコンテキストルートを指定する

昨日のエントリはガセ(コメントありがとうございました).--prefixオプションで任意のコンテキストルートが指定できたよ.
具体的には,こんな感じだ.

$ java -jar winstone-0.9.6.jar --prefix=/click click-examples.war

これで以下のいずれかでもアクセス可能になる.

http://localhost:8080/click
http://localhost:8080/click/

prefixの指定方法がイマイチ分かりづらかったんで,いろいろ試してみた.
結果は,こう.

× --prefix=click
○ --prefix=/click
× --prefix=click/
× --prefix=/click/
× --prefix=/click/examples/

これで何の問題もない.やっぱりスゴイぞWinstone.:-D

winstone.propertiesについて

マニュアルにも書いてあるけど,カレントディレクト*1winstone.propertiesってのを作っておけば,長ったらしいオプションを毎回書かないで済む.
たとえば,DataSourceとかはプロパティに書いたほうが見やすい.

--- winstone.properties ---
controlPort=8081
useJasper=true
javaHome=d:/java2/jdk150_10
toolsJar=d:/java2/jdk150_10/lib/tools.jar
useJNDI=true
jndi.resource.jdbc/HogeDS=javax.sql.DataSource
jndi.param.jdbc/HogeDS.url=jdbc:oracle:thin:@localhost:1521:HOGE
jndi.param.jdbc/HogeDS.driverClassName=oracle.jdbc.OracleDriver
jndi.param.jdbc/HogeDS.username=hoge
jndi.param.jdbc/HogeDS.password=hoge

なお,プロパティは引数に負ける.


ps.
ちなみに,Jasperなどの追加ライブラリは,これまたカレントディレクトリにlibディレクトリを掘って置いておけば,勝手に追加してくれる*2

*1:--configオプションでパス指定もできる

*2:これも--commonLibFolderオプションで任意のパスを指定できる

OracleとJ2SE5で致命的なバグ - minghaiの日記

Java5のBigDecimalの仕様変更には,ちょいとした恨みがあるんだけど,よもやOracleにも影響があったとは.
つーか,PreparedStatement#setBigDecimal()BigDecimalを使う以上,他のJDBCドライバも怪しむ必要があるかもダ.


(追記)会社のOracle10gで試してみたけど,ちゃんと再現したよ(ドライバは10.1.0.2だったかな?).
さらに言えば,PreparedStatement#setBigDecimal()が悪いんじゃなくて,BigDecimalが悪い.つまり,同現象はPreparedStatement#setObject()でも起こるのだ.


ちなみに,すべてのBigDecimalがダメなワケじゃなくて,元ネタが指数付きだとヤバイようだ.
なんで,

new BigDecimal("12500000");

なんてのは平気だ.
不味いのはJavalobbyに投稿してあったようなパターンで,

new BigDecimal(new Double(12500000).toString());
new BigDecimal("1.25E+7");

みたいのはダメ.


と考えると,doubleやfloatをBigDecimalの元ネタにしてなければ,案外平気なのかも知れない.
#ん?BigDecimalで乗除算したのも不味いか.