LoginSignup
0
0

More than 1 year has passed since last update.

JMXでatomikosのコネクションプールサイズを取得できなかった原因が単純だった話

Posted at

アプリケーション内で以下のようにMbeanを登録してJMXで取得できるようにした際に
Mbeanへの登録は出来ているのに実際のコネクションプールの値が取得できないことがあった。(ソースは若干省き、例外処理とかちゃんと書こうね)

RegisterClass
Context context = new InitialContext();
AtomikosDataSourceBean dataSource= (AtomikosDataSourceBean) context.lookup("java:/comp/env/dataSourceName");
MBean mbean = new Mbean(dataSource);
ObjectName mbeanName = new ObjectName("mbeanName");

MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();
mbeanServer.registerMBean(mbean,mbeanName);
MBeanClass
AtomikosDataSourceBean dataSource = null;

public MBean(AtomikosDataSourceBean dataSource){
    this.dataSource= dataSource;
}

public int getAvailbleSize() {
    return (this.dataSource).poolAvailableSize();
}

public int getTotalSize() {
    return (this.dataSource).poolTotalSize();
}

取得できなかった原因はアプリケーション内で一度もコネクションが取得されておらず、AtomikosDataSourceBeanが持つConnectionPoolインスタンスが生成されていないことにあった。
そのためConnectionPool.poolAvailableSize();を呼び出した際にヌルポが発生していた。

アプリケーション内で一度でも以下のようにDBにアクセスしていれば以降は値が取得できた。

Connection conn = dataSource.getConnection();

アプリちゃんと動かしてないとコネクションプールは取れないよって話。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0