(I have a wlsbJMSServer JMSServer, a uoo JMSModule, a uooq JNDI name for the Queue)
WLST
connect(....)
cd serverRuntime:/JMSRuntime/AdminServer.jms/JMSServers/wlsbJMSServer/Destinations/uoo!uooq
the cmo is:
[MBeanServerInvocationHandler]com.bea:ServerRuntime=AdminServer,Name=uoo!uooq,Type=JMSDestinationRuntime,JMSServerRuntime=wlsbJMSServer
cmo.getMessagesCurrentCount()
Java
package com.acme.gu.jms;
import java.util.Properties;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import weblogic.management.runtime.JMSDestinationRuntimeMBean;
import weblogic.jms.extensions.JMSRuntimeHelper;
public class JMSJMX {
public static void main(String[] args) throws NamingException, JMSException {
JMSJMX jmsjmx = new JMSJMX();
jmsjmx.countMessages();
}
public void countMessages() throws NamingException, JMSException {
Properties env = new Properties();
env.put(Context.PROVIDER_URL, "t3://localhost:7001");
env.put(Context.SECURITY_PRINCIPAL, "weblogic");
env.put(Context.SECURITY_CREDENTIALS, "weblogic1");
env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
InitialContext ctx = new InitialContext(env);
Destination queue = (Destination) ctx.lookup("uooq");
JMSDestinationRuntimeMBean destMBean = JMSRuntimeHelper.getJMSDestinationRuntimeMBean(ctx, queue);
System.out.println("count: " + destMBean.getMessagesCurrentCount());
}
}
see also:
http://docs.oracle.com/cd/E11035_01/wls100/javadocs_mhome/weblogic/management/runtime/JMSDestinationRuntimeMBean.html
http://docs.oracle.com/cd/E12840_01/wls/docs103/javadocs/weblogic/jms/extensions/JMSRuntimeHelper.html
If you want to invoke the same code in OSB, you can use this variant:
package com.acme.gu.jms;
/**
* Method to be run inside a Container
* @param jndis
* @return
* @throws NamingException
* @throws JMSException
*/
public static String countCurrentMessages(String[] jndis) throws NamingException, JMSException {
StringBuffer result = new StringBuffer();
InitialContext ctx = new InitialContext();
for (int count = 0; count < jndis.length; count++) {
Destination queue = (Destination) ctx.lookup(jndis[count]);
JMSDestinationRuntimeMBean destMBean = JMSRuntimeHelper.getJMSDestinationRuntimeMBean(ctx, queue);
result.append(Long.toString(destMBean.getMessagesCurrentCount()));
if (count < jndis.length - 1) {
result.append(",");
}
}
return result.toString();
}
And you invoke it with a Java Callout, passing in input a Sequence
('jndi1', 'jndi2')
which is converted automatically in a String[]
I am returning a CSV list (String), because a String[] as a return parameter in converted into a Java object, which is not easy to access in OSB.
Make sure you associate a Service Account (static) to the Java Callout, because when you create a new InitialContext without associating credentials, OSB attaches an anonymous user and you get an error:
Callout to java method "public static java.lang.String[] com.acme.gu.jms.JMSJMX.countCurrentMessages(java.lang.String[]) throws javax.naming.NamingException,javax.jms.JMSException" resulted in exception: javax.naming.NoPermissionException: User <anonymous> does not have permission on weblogic.management.adminhome to perform lookup operation.
weblogic.jms.common.JMSException: javax.naming.NoPermissionException: User <anonymous> does not have permission on weblogic.management.adminhome to perform lookup operation.
at weblogic.jms.extensions.JMSRuntimeHelper.getJMSDestinationRuntimeMBean(JMSRuntimeHelper.java:458)
at com.acme.gu.jms.JMSJMX.countCurrentMessages(JMSJMX.java:49)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at stages.transform.runtime.JavaCalloutRuntimeStep$1.run(JavaCalloutRuntimeStep.java:173)
The alternative is to enable "Anonymous Admin Lookup Enabled" in "View Domain-wide Security Settings" in WebLogic console.
No comments:
Post a Comment