« 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

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/3959/15920390

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

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