-
1. Re: Listing all EJBs through JMX
dimitris Dec 21, 2006 5:23 AM (in response to danieldestro)You can navigate the jsr77 tree using a simple jmx query:
*:j2eeType=EjbModule,*
Try JBOSS_HOME/bin/twiddle jsr77 on the latest jboss or look how it is implemented in the source code. -
2. Re: Listing all EJBs through JMX
danieldestro Dec 21, 2006 8:51 AM (in response to danieldestro)Hi dimitris,
I tried to use twiddle according to the examples (http://docs.jboss.org/jbossas/jboss4guide/r1/html/ch2.chapter.html), but I only got error messages, such as:C:\jboss-4.0.3SP1\bin>twiddle query 'jboss:service=JNDIView' 13:48:38,772 ERROR [Twiddle] Command failure org.jboss.console.twiddle.command.CommandException: Unused argument: JNDIView' at org.jboss.console.twiddle.command.QueryCommand.processArguments(Query Command.java:104) at org.jboss.console.twiddle.command.QueryCommand.execute(QueryCommand.j ava:119) at org.jboss.console.twiddle.Twiddle.main(Twiddle.java:290)
or evenC:\jboss-4.0.3SP1\bin>twiddle query '*:j2eeType=EjbModule,*' 13:50:26,810 ERROR [Twiddle] Command failure org.jboss.console.twiddle.command.CommandException: Unused argument: EjbModule at org.jboss.console.twiddle.command.QueryCommand.processArguments(Query Command.java:104) at org.jboss.console.twiddle.command.QueryCommand.execute(QueryCommand.j ava:119) at org.jboss.console.twiddle.Twiddle.main(Twiddle.java:290)
I am using JBoss-4.0.3-SP1 and Java 5. -
3. Re: Listing all EJBs through JMX
dimitris Dec 21, 2006 9:51 AM (in response to danieldestro)Use double quotes.
twiddle query "*:j2eeType=WebModule,*" -
4. Re: Listing all EJBs through JMX
danieldestro Dec 21, 2006 12:11 PM (in response to danieldestro)Hahahaah... different result. But still not satisfied.
C:\jboss-4.0.3SP1\bin>twiddle query "*:j2eeType=EjbModule,*" 17:08:19,307 ERROR [Twiddle] Command failure org.jboss.console.twiddle.command.CommandException: No MBean matches for query: *:j2eeType=EjbModule,* at org.jboss.console.twiddle.command.MBeanServerCommand.queryMBeans(MBea nServerCommand.java:60) at org.jboss.console.twiddle.command.QueryCommand.execute(QueryCommand.j ava:126) at org.jboss.console.twiddle.Twiddle.main(Twiddle.java:290)
I am reading the source code and I am gonna try it out. -
5. Re: Listing all EJBs through JMX
danieldestro Dec 21, 2006 12:19 PM (in response to danieldestro)Ok, better results now:
C:\jboss-4.0.3SP1\bin>twiddle query "jboss.j2ee:service=EjbModule,*" jboss.j2ee:service=EjbModule,module=gpa-ejb.jar jboss.j2ee:service=EjbModule,module=mdc-idf.jar jboss.j2ee:service=EjbModule,module=mdc.jar
I´ll do some testing with it and try to list the EJBModules´s EJB list.
By the way, EJB (CAPITALS) does not work, the correct is "Ejb" -
6. Re: Listing all EJBs through JMX
peterj Dec 21, 2006 12:28 PM (in response to danieldestro)The listing you got was of all the JAR files containing EJBs. If you want all of the EJBs themselves, try:
twiddle query "*:j2eeType=StatefulSessionBean,*"
and
twiddle query "*:j2eeType=StatelessSessionBean,*"
Usually, it is easiest to use the jmx-console to view the mbeans, and from there decide what to pass to twiddle (or to use in your code when accessing jmx via the api). -
7. Re: Listing all EJBs through JMX
danieldestro Dec 21, 2006 1:11 PM (in response to danieldestro)"PeterJ" wrote:
twiddle query "*:j2eeType=StatefulSessionBean,*"
and
twiddle query "*:j2eeType=StatelessSessionBean,*"
Does not work at all for me with twiddle. -
8. Re: Listing all EJBs through JMX
danieldestro Dec 21, 2006 2:07 PM (in response to danieldestro)Good news!
Ok, this works:String name = "jboss.management.local:*,j2eeType=StatelessSessionBean"; server = (MBeanServer) MBeanServerLocator.locateJBoss(); Set matches = server.queryMBeans(new ObjectName(name), null); ServerObjectInstance[] names = (ServerObjectInstance[]) matches.toArray( new ServerObjectInstance[matches.size()] ); for( int i=0; i< names.length; i++ ) { out.println(names.getObjectName()+" <br>"); }
And outputs:jboss.management.local:name=ejb/MyCoolEjb,J2EEServer=Local,EJBModule=cool.jar,J2EEApplication=null,j2eeType=StatelessSessionBean
jboss.management.local:name=ejb/AnotherCoolEjb,J2EEServer=Local,EJBModule=still-cool.jar,J2EEApplication=null,j2eeType=StatelessSessionBean
jboss.management.local:name=ejb/EjbOrNotEjb,J2EEServer=Local,EJBModule=myapp.jar,J2EEApplication=myapp.ear,j2eeType=StatelessSessionBean
Very close now.
Here I have the JNDI names for lookup. But what I really need is the Bean, and if possible Local and Remote classes/interfaces names.
I know it is possible throgh jmx-console. Just need to get things clear. Any help? -
9. Re: Listing all EJBs through JMX
danieldestro Dec 21, 2006 2:18 PM (in response to danieldestro)I want to see what info I have inside the bean where "j2eeType=EJBModule", link in the link providade at jmx-console
-
10. Re: Listing all EJBs through JMX
peterj Dec 21, 2006 4:09 PM (in response to danieldestro)Look at the methods on MBeanServer.
Also google "jboss jmx tutorial". -
11. Re: Listing all EJBs through JMX
danieldestro Dec 28, 2006 7:10 AM (in response to danieldestro)"PeterJ" wrote:
Also google "jboss jmx tutorial".
As if existed any. -
12. Re: Listing all EJBs through JMX
danieldestro Jan 12, 2007 8:10 AM (in response to danieldestro)Finally I achieved what I wanted.
The code bellow shows all the "ejb-jar.xml" deployed in the container.package test; import java.lang.reflect.Method; import java.util.*; import javax.management.*; import org.jboss.jmx.adaptor.control.*; import org.jboss.mx.server.*; import org.jboss.mx.util.*; public class Test { public void getDeploymentDescriptors() { String query = "jboss.management.local:*,j2eeType=EJBModule"; MBeanServer server = (MBeanServer) MBeanServerLocator.locateJBoss(); Set matches = server.queryMBeans( new ObjectName( query ), null ); Iterator it = matches.iterator(); while( it.hasNext() ) { ObjectInstance soi = (ServerObjectInstance) it.next(); ObjectName objName = soi.getObjectName(); String objectNameString = objName.toString(); MBeanInfo mbeanInfo = server.getMBeanInfo(objName); MBeanAttributeInfo[] attributeInfo = mbeanInfo.getAttributes(); for( int a=0; a < attributeInfo.length; a++ ) { MBeanAttributeInfo attrInfo = attributeInfo[a]; if( !"deploymentDescriptor".equals( attrInfo.getName() ) ) { continue; } AttrResultInfo attrResult = Server.getMBeanAttributeResultInfo(objectNameString, attrInfo); String attrValue = attrResult.getAsText(); //prints out the "ejb-jar.xml" System.out.println( attrValue ); } } } }