JDKのバージョン下位互換性

JDKはバージョンがあがるたびに新しくクラスが追加されますが、ビルド時に確認する方法ってあるんでしょうか。やっぱりコンパイルするJDKに依存してしまうものなのでしょうか。

どういうことかっていうと、今JDK6で開発しているプラグインがJDK5でも動くことを保障するには、JDK5へ環境を移さないとすべて確認できないのかということです。例えばJDK6からCookieManagerの実装クラスが提供されるようになりましたが、ということはJDK5だとCookieManagerの実装クラスは提供されていないということで、それなりの対応をしなければならないと思いますが、具体的に何をしたらいいのかをわかるために有用なツールとかないもんかなと。実験的な意味で始めたプロジェクトなんで、下位互換性を気にしなくてもいいかと思っててもやっぱり気になるもんですよ。

こみゅすけから参加者一覧を取得する

EclipsePlugin勉強会の参加者が増えてないかなーとわくわくしながらこみゅすけにアクセスしていたのだけれども、ふとHTMLで一覧を出力してくれないかなーと思った。よく考えてみたら、こみゅすけはAjaxを駆使して作られている。ん?そういえば一覧は不思議な動きをするぞ?
ということで、FireFoxのアドイン「Live HTTP headers」でどういうリクエストとレスポンスが飛んでるか見てみたら、受け口とJSONで通信していることがわかった。こみゅすけの管理人、よういちろうさんから公開してよいとお許しが出たので、駄コードをさらしてみる。例によってJUnit4を実行するランチャとして使ってみた。

package learning;

import static org.junit.Assert.assertNotNull;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.Date;

import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener;
import org.junit.Test;

public class JSONLearning {

  @Test
  public void leaningJSON() throws Exception {
    // 2007 11 EclipsePlugin勉強会
    String meetingId = "57";
    URL url = new URL("http://commusuke.eisbahn.jp/ajax/attendances/"+meetingId);
    assertNotNull(url);
    BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
    String line = reader.readLine();
    JSONTokener tokener = new JSONTokener(line);
    JSONObject value = (JSONObject) tokener.nextValue();
    JSONArray array = value.getJSONArray("attendances");
    for(int i = 0; i < array.length(); i++){
      JSONObject jsonObject = array.getJSONObject(i);
      String name = jsonObject.getString("nick_name");
      String comment = jsonObject.getString("comment");
      Date date = new Date();
      long time = jsonObject.getLong("updated_at");
      date.setTime(time * 1000L);
      String formated = String.format("[%tF]%s:%s", date,name,comment);
      System.out.println(formated);
    }
  }
}

使用したJSONのライブラリはorg.jsonを使ってみた。json-libも試したけど、とってもFatで使え切れません。

スレッドを立ち上げる場合のテスト

例えばビルド処理とか時間のかかる処理の場合、
IProgressMonitorを使ってスレッドを立ち上げて
並列処理を行います。
しかしそういった場合メインスレッドの方は
サブスレッドの処理が終わらなければ
期待した状態ではないため、
テストが失敗してしまいます。

こういった場合はThread.sleep()とかやって
とめておくしかないのでしょうか・・・。

Eclipseプラグイン開発

Eclipseプラグイン開発
現在このの本をお勉強中。この本は結構いいです。
少しずつ試しながら読み進めることでEclipseのいろいろが見につきます。
サンプルコードもコピーするのではなく、打ち込むことで
こんな使い方ができるのかーって感じです。

Eclipse RCP開発 その1

Eclipse RCPを使うために現在Eclipseのプラグイン作成方法を勉強中。
plugin.xmlを使ってどういった拡張をするのか設定するのですが、
クラス名とかが違うと期待したとおりに動きません。
そこまでは理解できます。
でも、出てくる例外の内容がまったく関係ないじゃん。

コンパイルしたクラスが見つからないとか出てるけど、
本当はpluginタグに定義した関係ないクラスが作ってないから
見つからないわけで、うまく動かないんだからさー。

例外投げるときはわかりやすく。
お願いしますよー。> eclipse