2017-01-11 15 views
0

Я пытаюсь получить доступ к DataSource ConnectionManager MBean с помощью java-клиента. Я могу получить к нему доступ, когда я укажу имя источника данных и имя JNDI в имени объекта. Мне нужен общий подход который может применяться для любого источника данных в server.xml, поскольку это делается как часть структуры, которая может использоваться в любом приложении.Имя общего объекта для доступа к диспетчеру подключения к источнику данных MBean в Liberty

Я пробовал несколько вариантов, но все время я получил «javax.management.InstanceNotFoundException».

Пример кода, как указано ниже:

<library id="oracle-lib"> 
<fileset dir="lib" includes="ojdbc6.jar"/> 
</library> 

<dataSource jndiName="jdbc/db" id="oracleDB" type="javax.sql.DataSource"> 
    <jdbcDriver javax.sql.DataSource="oracle.jdbc.pool.OracleConnectionPoolDataSource" libraryRef="oracle-lib" /> 
    <connectionManager agedTimeout="10" maxIdleTime="1800" connectionTimeout="180" minPoolSize="10" maxPoolSize="1" reapTime="180"/> 
    <properties.oracle user="user" password="password" 
      url="jdbc:oracle:thin:@//db-server:1521/db"/> 
</dataSource> 

Имя объекта, который работал:

ObjectName jvmQuery = new ObjectName("WebSphere:type=com.ibm.ws.jca.cm.mbean.ConnectionManagerMBean,jndiName=jdbc/db,name=dataSource[oracleDB]/ConnectionManager[default-0]") 

родовых имен объектов Я пробовал:

1.WebSphere:type=com.ibm.ws.jca.cm.mbean.ConnectionManagerMBean,* 
2.WebSphere:type=com.ibm.ws.jca.cm.mbean.ConnectionManagerMBean,name=dataSource[default-0]/ConnectionManager[default-0],* 
3.WebSphere:service=com.ibm.ws.jca.cm.mbean.ConnectionManagerMBean,* 
4.WebSphere:service=com.ibm.ws.jca.cm.mbean.ConnectionManagerMBean,name=dataSource[default-0]/ConnectionManager[default-0],* 
5.WebSphere:service=com.ibm.ws.jca.cm.mbean.ConnectionManagerMBean,name=dataSource[default-0]/ConnectionManager[default-0] 

Не могли бы вы посоветовать ..

Спасибо, Biju

ответ

2

вариант запроса # 1 должен работать нормально:

WebSphere:type=com.ibm.ws.jca.cm.mbean.ConnectionManagerMBean,* 

Я просто проверял с источниками несколько данных в моей конфигурации и получил следующее:

Found MBean: WebSphere:type=com.ibm.ws.jca.cm.mbean.ConnectionManagerMBean,jndiName=jdbc/ds1,name=dataSource[ds1]/connectionManager 
Found MBean: WebSphere:type=com.ibm.ws.jca.cm.mbean.ConnectionManagerMBean,jndiName=jdbc/ds2,name=dataSource[ds2]/connectionManager 
Found MBean: WebSphere:type=com.ibm.ws.jca.cm.mbean.ConnectionManagerMBean,jndiName=jdbc/ds3,name=dataSource[ds3]/connectionManager[default-0] 
Found MBean: WebSphere:type=com.ibm.ws.jca.cm.mbean.ConnectionManagerMBean,jndiName=jdbc/XAds,name=dataSource[XAds]/connectionManager 

Имейте в виду, что MBIans диспетчера соединений лениво созданы. Если вы ожидаете найти mbean в запросе, убедитесь, что вы уже получили соединение с источником данных. Получение соединения из источника данных приведет к созданию диспетчера подключений (и его MBean).

+0

Благодарим за сообщение. Я также могу найти MBean, когда упоминаю имя JNDI и имя источника данных в Query. Здесь я ищу общий запрос для всех MBeans. Без упоминания какого-либо конкретного источника данных или имени jndi. Например: для четырех тестируемых источников данных для каждого из них должен работать один запрос. –

+0

Да, вы должны иметь возможность запрашивать все mbeans типа без знания имени jndi, как я показал выше. Если это не работает, откройте jconsole и убедитесь, что mbeans на самом деле там. –

+0

Я все еще смущен. Я получаю «javax.management.InstanceNotFoundException: WebSphere: type = com.ibm.ws.jca.cm.mbean.ConnectionManagerMBean, * '. Я мог видеть MBeans в JConsole. –