On a WebLogic Server, I had to write a WLST script to find the current number of consumers accessing a specific JMS Queue destination as this is not monitored by Oracle Grid Control 11g or Oracle Cloud Control 12c. Knowing only the short name of the queue, I uses a regular expression in my WLST script to find the needed information.

To find the correct queue destination I had to search the Queue Destination Name. But in the Runtime tree, the fully-qualified name of this queue resource is preceded by the parent module name, separated by an exclamation point (!) (e.g DocumentApplicationJMSSystemModule!SOAReqMSQ). So how can I find an object using the short name SOAReqMSQ?

Finding the object via WLST script

To achieve this task, you have to:

Step 1: Use a regular expression by adding in your WLST script:

import re

 

Step 2: Use the primitive operation:

re.search(pattern, string[, flags])

 

Step 3: Search only for the defined word and not more:

If you search for SOAReqMSQ using…

cQueueName='SOAReqMSQ'
result = re.search(cQueueName,destination.getName());
...the result will be:
DocumentApplicationJMSSystemModule!SOAReqMSQDocumentApplicationJMSSystemModule!SOAReqMSQ_ErrorQ
 To find the correct one, use the $ to match the end of the string
cQueueName='SOAReqMSQ$'
result = re.search(cQueueName,destination.getName());

This way, DocumentApplicationJMSSystemModule!SOAReqMSQ may be found.

Step 4: In the end, your script should look similar to this (the important information related to the search issue is underlined):

import re


# check queue name
cQueueName='SOAReqMSQ$'


# check only the queue for the Managed Server Name containing soa01
cServer='soa01'

connect(userConfigFile='/opt/user_projects/domains/testdomain/security/uc',userKeyFile='/opt/user_projects/domains/testdomain/security/uk',url='t3://testhost:8101')

# get server list
servers = domainRuntimeService.getServerRuntimes();

if (len(servers) > 0):
for server in servers:
# find if ServerName contains soa01
result = re.search(cServer,server.getName());
if result != None:
jmsRuntime = server.getJMSRuntime();
jmsServers = jmsRuntime.getJMSServers();
jmsName = jmsRuntime.getName();
print 'n';
print 'Name',jmsName;
print '----------------------------';
for jmsServer in jmsServers:
destinations = jmsServer.getDestinations();
for destination in destinations:
result = re.search(cQueueName,destination.getName());
if result != None:
print 'DESTINATION:',destination.getName();
print 'JMS Server:',jmsServer.getName();
print 'ConsumersCurrentCount:',destination.getConsumersCurrentCount()

Step 5: Here is the script output:

Name testdomainsoa01.jms
----------------------------
DESTINATION: DocumentApplicationJMSSystemModule!SOAReqMSQ
JMS Server: DocumentApplicationJMSServer
ConsumersCurrentCount: 0

This python script can be then called by a shell script that will be integrated, for instance, as a UDM script in Grid Control 11g.