« Teedaでログイン管理 | Main | Teedaのカスタムバリデータ »

2007.07.27

Seasar2でConnectionPoolの情報取得

 JNDI経由でDataSourceを取得している場合、そのプーリングの状態はjconsoleで簡単に取得することが可能です。
 Seasar2ではjdbc.diconの設定でいくつかのDataSourceを切り替えることが可能ですが、どのデータソースを使うのがベターなのか? (サーバを使用しない)テストの時のことを考えるとJNDIを使用しない方法かなぁ、と思いつつ・・・この方法だと、コネクションプールの状況を取得するにはどうすれば??

 ってことでたどり着いたのが、MXBeanを使用する方法です(Java6以降限定になってしまいますが)。MXBeanを作るにあたって参考にしたのは、Java in the Box - Java SE 6 じゃじゃ馬ならし User Defined MXBeanです。

 org.seasar.extension.dbcp.ConnectionPoolインタフェースでは、コネクションプールの状況に関するメソッドとして getActivePoolSize()、getFreePoolSize()、getMaxPoolSize()、getTxActivePoolSize() の4つがあるので、

@MXBean
public interface ConnectionPoolMonitor {
  public int getActivePoolSize();
  public int getFreePoolSize();
  public int getMaxPoolSize();
  public int getTxActivePoolSize();
}

ってインタフェースを準備。@MXBeanアノテーションを指定してるので、インタフェース名の末尾にMXBeanを付加する必要なし。

 んで、これを実装したクラスとして、

public class ConnectionPoolMonitorImpl
  implements ConnectionPoolMonitor {
 private ConnectionPool pool;
 public ConnectionPoolMonitorImpl() {
  S2Container container = SingletonS2ContainerFactory.getContainer();
  this.pool = (ConnectionPool)container.getComponent(ConnectionPool.class);
 }
 public int getActivePoolSize() {
  return pool.getActivePoolSize();
 }
 public int getFreePoolSize() {
  return pool.getFreePoolSize();
 }
 public int getMaxPoolSize() {
  return pool.getMaxPoolSize();
 }
 public int getTxActivePoolSize() {
  return pool.getTxActivePoolSize();
 }
}

を準備。

 どこかで以下のような感じでMXBeanの登録を行います(Servletの初期化時などが選択肢?)。

MBeanServer server = ManagementFactory.getPlatformMBeanServer();
ConnectionPoolMonitor monitor = new ConnectionPoolMonitorImpl();
try {
 ObjectName objName = new ObjectName("test:name=ConnectionPoolMonitor");
 server.registerMBean(monitor, objName);
} catch (Exception e) {
 e.printStackTrace();
}

 jconsoleでアタッチすれば、登録したMXBeanが画面に表示され、コネクションプールのステータスを知ることができる・・・はずです。

#まだjconsoleの画面に表示されるところまでしか確認していないので、実際にDBに接続したときにちゃんと数値が変わるかどうかは不明(^^;

|

« Teedaでログイン管理 | Main | Teedaのカスタムバリデータ »

Java」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack


Listed below are links to weblogs that reference Seasar2でConnectionPoolの情報取得:

« Teedaでログイン管理 | Main | Teedaのカスタムバリデータ »