私は、監視するすべてのメトリックのハッシュマップを返すgetdbPoolStatistics()という名前の関数を使用して、dbpoolの詳細を取得しようとしています。 getdbPoolStatistics()では、私は2 dbプールを返すC3P0Registry.getPooledDataSources()を使用し、イテレーター、すなわちconnectionIteratorを使用してプールにアクセスします。C3P0Registry MBeanがMBeanServerに登録されていません。 InstanceNotFoundExceptionを取得する
トークンを取得するには、ObjectNameの作成時にさらに使用します。
ArrayList<String> pooledDataSourcesIdentityTokenList = new ArrayList<String>();
mbeanは、監視情報を提供します。
Iterator<PooledDataSource> connectionIterator = C3P0Registry.getPooledDataSources().iterator();
トークンを取得してArrayListに追加します。私たちがMBeanの登録中のMBeanServer
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
を取得する必要があります。この後
while(connectionIterator.hasNext()) {
pooledDataSourcesIdentityTokenList.add(connectionIterator.next().getIdentityToken());
}
、私はドメインを使用している:com.mchange.v2.c3p0、キーと値:タイプ= PooledDataSourceとidentityToken = C3P0Registryの2 dbプールオブジェクトのArrayListに追加したトークン。
私はmbs.registerMBeanを使用したObjectName()
for (int i = 0; i < pooledDataSourcesIdentityTokenList.size() ; i++) {
ObjectName objName = new ObjectName("com.mchange.v2.c3p0:type=PooledDataSource,identityToken="+pooledDataSourcesIdentityTokenList.get(i)+",*");
mbs.registerMBean(connectionIterator2.next(), objName.getInstance("com.mchange.v2.c3p0","identityToken",pooledDataSourcesIdentityTokenList.get(i)));
}
を登録する場合、私は代わりにそれを反復処理の完全なオブジェクトを使用している場合さて、私は今
:error: unreported exception InstanceAlreadyExistsException; must be caught or declared to be thrown
を取得します。
for (int i = 0; i < pooledDataSourcesIdentityTokenList.size() ; i++) {
ObjectName objName = new ObjectName("com.mchange.v2.c3p0:type=PooledDataSource,identityToken="+pooledDataSourcesIdentityTokenList.get(i)+",*");
mbs.registerMBean(C3P0Registry.getPooledDataSources() , objName);
startTimeMillisArray[i] = (String)(mbs.getAttribute(objName, "startTimeMillisDefaultUser"));
}
私が手:InstanceAlreadyExistsExceptionとして
error: unreported exception InstanceAlreadyExistsException; must be caught or declared to be thrown mbs.registerMBean(C3P0Registry.getPooledDataSources() , objName);
を、私は私がのその行を削除してregisterMBean()は、多くの例で使用されていなかったことがわかった。またMBeanの を登録していないと考えコードを試してみました。
私はその後、私はエラーを取得するのgetAttributeしようとstartTimeMillisArray
for (int i = 0; (i < pooledDataSourcesIdentityTokenList.size() ; i++) {
ObjectName objName = new ObjectName("com.mchange.v2.c3p0:type=PooledDataSource,identityToken="+pooledDataSourcesIdentityTokenList.get(i)+",*");
//No registering mbean here.
startTimeMillisArray[i] = (String)(mbs.getAttribute(objName, "startTimeMillisDefaultUser"));
}
に入れて、その後のObjectNameを作り続けるとした場合:
javax.management.InstanceNotFoundException: com.mchange.v2.c3p0:type=PooledDataSource,identityToken=2ufaha9lm5mbruczledo|86ffe7,*
javax.management.InstanceNotFoundException: com.mchange.v2.c3p0:type=PooledDataSource,identityToken=2ufaha9lm5mbruczledo|c7dca5,*
これは、多くのを作成していますregisterMBean()を使用するかどうか、そして私が正しい方法でそれを使用しているかどうかを混乱させますか?助けてください。
本当に、c3p0には既にmbeansが登録されていました。ありがとう:) – Falcon34
私はあなたのために働いて非常にうれしいよ! –