JSR-77を使った管理コンソール

JBoss 3.2からhttp://localhost:8080/web-console/でWebコンソールが使えるようになりました。いままで、あまりにも機能が貧弱だったのでソースを読む気にもならなかったのですが、最近はJSR-77の機能を使った統計情報も表示されるようになりましたし、JBoss 4.0ではJDBCコネクションプールのWizardを追加されそうです。そろそろ、中を覗いてみようと思います。アプレットは好きではないので簡単に自作できないか検討してみましょう。

参考情報:

Beanプロパティの型変換

Spring frameworkではJavaBeanの定義ファイルはXMLに書きます。ここにBeanプロパティの初期化情報を指定できます。


  
    123
    
  
  
    0.123
    
  
  
    2003-11-13
  

これを読むにはApplicationContextというクラスを使います。これにはいくつか種類がありますが、ここではクラスパスからファイルを検索するClassPathXmlApplicationContextを使います。

package sample;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringSample {
  static final String CONTEXT_FILE = "applicationContext.xml";

  public static void main(String[] args) throws Exception {
    
    ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(CONTEXT_FILE);

    MyBean1 bean1 = (MyBean1)ctx.getBean("bean1");

    System.out.println("bean1 name=" + bean1.getName());
    System.out.println("bean1 intValue=" + bean1.getIntValue());

    System.out.println("bean2 name=" + bean1.getBean2().getName());
    System.out.println("bean2 doubleValue=" + bean1.getBean2().getDoubleValue());

    System.out.println("bean3 name=" + bean1.getBean2().getBean3().getName());
    System.out.println("bean3 dateValue=" + bean1.getBean2().getBean3().getDateValue());
  }
}

これで上手くいければ良いのですが、実際には"bean3"のdateValueを読むところでエラーになります。StringからDateへの変換方法が分からないからです。この変換を行うにはPropertyEditorを定義する必要があります。たとえばこんな感じ。

package sample;

import java.beans.PropertyEditorSupport;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.Date;

public class MyDateEditor extends PropertyEditorSupport {
  public MyDateEditor() {};
  public void setAsText(String text) throws IllegalArgumentException {
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    try {
      Date result = df.parse(text);
      setValue(result);
    }
    catch (ParseException pe) {
      throw new IllegalArgumentException("illegal date format");
    }
  }

最後に、先ほどのSpringSample.main()の先頭に次の1行を追加すればOKです。

PropertyEditorManager.registerEditor(java.util.Date.class, MyDateEditor.class);

ここで紹介したのは直接PropertyEditorManagerを使う方法です。
SpringではMVCフレーム用にはあらかじめいくつかのカスタムPropertyEditorが準備されていてコントローラと統合されていますが、今回のようにBean定義を読むときにどう使ってよいのか分かりませんでした。

IoCコンテナのautowire機能

SpringのBean定義ファイルで要素にautowire属性を"ByType"のように指定すると、コンテナは型にもとづいてBean間の参照関係を自動的に解決してくれます。たとえば、次の例ではbean1->bean2, bean2->bean3の参照はXML上に記述してありませんが、コンテナが解決してくれます。


  
    123
  
  
    0.123
  
  
    2003-11-13
  

ただし、同じ型を持つBeanが複数存在するときはgetBean()を呼び出したときに実行時エラーになります。