drone.io で Java7 を使う
ここ数日、testing.mysqld や testing.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 ベースでしか動作確認していなかった