4

JMX 経由で ehcache に保存されているデータ/オブジェクトを表示する方法はありますか? キャッシュ統計だけが見つかりましたが、オブジェクト構造を表示する必要があります。

4

1 に答える 1

1

これが必要な場合はビルドできますが、Ehcache JMX 実装では利用できません。ehcache に格納されたオブジェクトが JMX を介して表示可能かどうかは不明であるため、どちらも期待できません。そうだとわかっていれば、ehcache CacheManager または Cache への参照を指定して、キャッシュのコンテンツを公開できる MBean を確実に作成できます。

メモリのみのキャッシュを使用している場合を除き、メモリ内ではなくディスク上にあるオブジェクトがキャッシュ内に存在するか、テラコッタを使用している場合はリモート サーバー上にある可能性があることに注意してください。また、Java オブジェクトをシリアル化された形式で格納する方が効率的な場合もあります。その場合、データを表示するには逆シリアル化が必要になります。

問題をデバッグしているときにこれらのオブジェクトを表示することのみに関心がある場合は、優れた IDE で利用できるようなデバッガーに依存することを検討します。NetBeans と Eclipse の両方に、キャッシュの内容を表示するために使用できる有能なデバッガーがあります。私は頻繁にそれをしました。

この質問に「春」のタグを付けたので、春を使用していると思います。Spring で MBean を作成するのは非常に簡単です。エクスポーター Bean をコンテキストに追加するだけで、MBean にオブジェクトと同じ名前のインターフェースを実装させることができますが、MBean が最後に追加されます。次に例を示します。

applicationContext.xml:

<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter" 
      p:autodetect="true"/>
<bean name="FOO:name=foo" class="com.foo.test.Foo"/>

Foo.java:

package com.foo.test;

public class Foo implements FooMBean {
  private String name;

  ...

  @Override
  public String getName() {
    return name;
  }

  @Override
  public void setName(String name) {
    this.name = name;
  }

  @Override
  public void printName() {
    System.out.println(name);
  }
}

FooMBean.java:

package com.foo.test;

public interface FooMBean {
  public String getName();
  public void setName(String name);
  public void printName();
}

この例では、「foo」オブジェクトは、「name」という名前の属性と「printName」という名前の操作を持つ JMX MBean として公開されます。MBean の名前は「FOO:name=foo」になります。その動作はすべてカスタマイズできます。参照: http://docs.spring.io/spring/docs/4.0.0.RELEASE/spring-framework-reference/htmlsingle/#jmx-exporting

于 2014-03-17T15:32:23.930 に答える