Twitter4J+SPDYをJava(非Android)で使うときの設定

※この記事のまとめは Twitter4JのSPDY対応について – TwitPane をご参照ください。

昨日の記事Twitter4J+SPDYがSPDY通信しているか確認できると書いたのですが、非Android環境というか、Eclipseやコンソール上のjavaコマンドから実行するとどうにもSPDY通信してくれないので困っていました。

その後いろいろと調査した結果、どうやらJVMにnpn-bootというものが必要らしいです。


Jetty/Feature/NPN - Eclipsepedia

To enable NPN support, you need to start the JVM with:

java -Xbootclasspath/p: ...

肝心の npn_boot_jar も上記リンクからダウンロードできます(「もうjettyのバージョンに合わせてないのでファイル名のバージョンではなく日付に注目してね」って書いてあるので注意)。

NPNの仕組みはJVMが標準でサポートしていないということなのかな。
むしろAndroid/Dalvik VM*1が標準でサポートしているところがさすがGoogle製といったところですかね。

D:\(略)>java -version
java version "1.7.0_04"
Java(TM) SE Runtime Environment (build 1.7.0_04-b20)
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode)


D:\(略)>"C:\Program Files\Java\jdk1.7.0_04\bin\java" -Xms30m -Xmx30m -Xbootclasspath/p:..\npn-boot-8.1.2.v20120308.jar -classpath (中略) twitter4j.examples.tweets.ShowStatusBenchmark
start
 [1357ms]
 [160ms]
 [176ms]
average:[564ms]
rate limit:[159/180], [687sec]
SPDY : [1/1]

たぶん java で SPDY やってる人には常識なんでしょうけど、ググラビリティが低くて2時間も悩んでしまったのでどなたかの参考になれば。

*1:4.1以降