WicketいいよWicket

SessionへInjectできるようになったよ

 昨日詰まっていたところですが、解決。「Session Wicket Guice」あたりで検索すると、InjectorHolderを使えばいいよという話が見つかると思うのでそれで。ただし、1.5ではInjectorに置き換わっているので注意。

JUnitが動くようになったよ

 少し前に詰まっていたところ。問題は、Injectができず、注入されているはずのフィールドを参照したときに、NullPointerExceptionが発生することでした。色々検索してみたのですが、スマートな解決方法は見つからず、GuiceApplicationFactoryからソースを一部拝借したら動くようになりました。
 拝借したのは次の3行。

    Injector injector = Guice.createInjector(new AModule(), new BModule());
    WebApplication app = injector.getInstance(WebApplication.class);
    app.getComponentInstantiationListeners().add(new GuiceComponentInjector(app, injector));

 上で取得したappをパラメータとして、WicketTesterをnewすれば動いてくれます。DBとの接続設定もModuleにもたせてあるので、試験用のDBに接続というのも容易に実現できそうです。
 もっとスマートなやり方があったら教えてください。

Javaについて

 素人が書いたmainメソッドのあるクラスは、全部のフィールドがstaticになっている。mainメソッドから直接参照できないからという理由でインスタンスフィールドを使わないというのはどうなんだろうか。
 自分の趣味ではこう書く。

class Main {
  public static void main(String[] args) {
    Main main = new Main();
    main.exec();
  }

  private int cnt;

  private void exec() {
    System.out.println(cnt++);
  }
}

 自分をインスタンス化するというだけで発狂するエンジニアも、世の中にはたくさんいるんですけどね。