読者です 読者をやめる 読者になる 読者になる

drone.io で Java7 を使う

ここ数日、testing.mysqldtesting.postgresql のコード整理をしていた関係で、
ついでに testing.cassandra もこつこつ直していました。
バグを潰したり、インターフェースを統一したり、python 2.6 に対応してたりしているので、
Python と Cassandra を使っていて、テスト時に一時的に Cassandra を用意する必要がある人は使ってみてください。

drone.io のデフォルトは Java6

さて、その変更の中で Cassandra の 1.2 と 2.0 でも動くように調整を行いました*1
Cassandra 1.2 までは drone.io が標準で提供している Java6 で動作するのですが、
Cassandra 2.0 以降はこんな感じで Java7 をしてきます。

xss =  -ea -javaagent:/usr/local/apache-cassandra-2.0.3/bin/../lib/jamm-0.2.5.jar -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42 -Xms1001M -Xmx1001M -Xmn200M -XX:+HeapDumpOnOutOfMemoryError -Xss256k
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/cassandra/service/CassandraDaemon : Unsupported major.minor version 51.0
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
	at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: org.apache.cassandra.service.CassandraDaemon. Program will exit.

ということで drone.io で Java7 を使えるようにします。

テストを空実行しつつ drone.io の環境を調べてみると、既に openjdk-7-jdk パッケージは入っているので
update-alternatives コマンドで java コマンドの向き先を変更します。

sudo update-alternatives --set java /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java

また、環境変数 JAVA_HOME が Java6 向けに設定されているので、これを Java7 用に設定しなおします。

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/jre

上記の 2行が、実行に 3分と少しかかるテストを 3回失敗させた成果となります。
よろしくご査収ください。

*1:お仕事の都合で、今までは 1.1 ベースでしか動作確認していなかった