An excerpt from JBoss JMX Documentation online.

### Command Line Access to JMX

JBoss provides a simple command line tool that allows for interaction with a remote JMX server instance. This tool is called twiddle (for twiddling bits via JMX) and is located in the `bin` directory of the distribution. Twiddle is a command execution tool, not a general command shell. It is run using either the `twiddle.sh` or `twiddle.bat` scripts, and passing in a `-h`(`--help`) argument provides the basic syntax, and `--help-commands` shows what you can do with the tool:

    [bin]$ ./twiddle.sh -h
    A JMX client to 'twiddle' with a remote JBoss server.

    usage: twiddle.sh [options] <command> [command_arguments]

    options:
        -h, --help                Show this help message
            --help-commands       Show a list of commands
        -H=<command>              Show command specific help
        -c=command.properties     Specify the command.properties file to use
        -D<name>[=<value>]        Set a system property
        --                        Stop processing options
        -s, --server=<url>        The JNDI URL of the remote server
        -a, --adapter=<name>      The JNDI name of the RMI adapter to use
        -q, --quiet               Be somewhat more quiet

#### 2.3.3.1. Connecting twiddle to a Remote Server

By default the twiddle command will connect to the localhost at port 1099 to lookup the default `jmx/rmi/RMIAdaptor` binding of the `RMIAdaptor` service as the connector for communicating with the JMX server. To connect to a different server/port combination you can use the `-s` (`--server`) option:

    [bin]$ ./twiddle.sh -s toki serverinfo -d jboss
    [bin]$ ./twiddle.sh -s toki:1099 serverinfo -d jboss

To connect using a different RMIAdaptor binding use the `-a` (--`adapter`) option:

    [bin]$ ./twiddle.sh -s toki -a jmx/rmi/RMIAdaptor serverinfo -d jboss

#### 2.3.3.2. Sample twiddle Command Usage

To access basic information about a server, use the `serverinfo` command. This currently supports:

    [bin]$ ./twiddle.sh -H serverinfo
    Get information about the MBean server

    usage: serverinfo [options]

    options:
        -d, --domain    Get the default domain
        -c, --count     Get the MBean count
        -l, --list      List the MBeans
        --              Stop processing options
    [bin]$ ./twiddle.sh --server=toki serverinfo --count
    460
    [bin]$ ./twiddle.sh --server=toki serverinfo --domain
    jboss

To query the server for the name of MBeans matching a pattern, use the `query` command. This currently supports:

    [bin]$ ./twiddle.sh -H query
    Query the server for a list of matching MBeans

    usage: query [options] <query>
    options:
        -c, --count    Display the matching MBean count
        --             Stop processing options
    Examples:
     query all mbeans: query '*:*'
     query all mbeans in the jboss.j2ee domain: query 'jboss.j2ee:*'
    [bin]$ ./twiddle.sh -s toki query 'jboss:service=invoker,*'
    jboss:readonly=true,service=invoker,target=Naming,type=http
    jboss:service=invoker,type=jrmp
    jboss:service=invoker,type=local
    jboss:service=invoker,type=pooled
    jboss:service=invoker,type=http
    jboss:service=invoker,target=Naming,type=http

To get the attributes of an MBean, use the get command:

    [bin]$ ./twiddle.sh -H get
    Get the values of one or more MBean attributes

    usage: get [options] <name> [<attr>+]
      If no attribute names are given all readable attributes are retrieved
    options:
        --noprefix    Do not display attribute name prefixes
        --            Stop processing options
    [bin]$ ./twiddle.sh get jboss:service=invoker,type=jrmp RMIObjectPort StateString
    RMIObjectPort=4444
    StateString=Started
    [bin]$ ./twiddle.sh get jboss:service=invoker,type=jrmp
    ServerAddress=0.0.0.0
    RMIClientSocketFactoryBean=null
    StateString=Started
    State=3
    RMIServerSocketFactoryBean=org.jboss.net.sockets.DefaultSocketFactory@ad093076
    EnableClassCaching=false
    SecurityDomain=null
    RMIServerSocketFactory=null
    Backlog=200
    RMIObjectPort=4444
    Name=JRMPInvoker
    RMIClientSocketFactory=null

To query the MBeanInfo for an MBean, use the info command:

    [bin]$ ./twiddle.sh -H info
    Get the metadata for an MBean

    usage: info <mbean-name>
      Use '*' to query for all attributes
    [bin]$ Description: Management Bean.
    +++ Attributes:
     Name: ServerAddress
     Type: java.lang.String
     Access: rw
     Name: RMIClientSocketFactoryBean
     Type: java.rmi.server.RMIClientSocketFactory
     Access: rw
     Name: StateString
     Type: java.lang.String
     Access: r-
     Name: State
     Type: int
     Access: r-
     Name: RMIServerSocketFactoryBean
     Type: java.rmi.server.RMIServerSocketFactory
     Access: rw
     Name: EnableClassCaching
     Type: boolean
     Access: rw
     Name: SecurityDomain
     Type: java.lang.String
     Access: rw
     Name: RMIServerSocketFactory
     Type: java.lang.String
     Access: rw
     Name: Backlog
     Type: int
     Access: rw
     Name: RMIObjectPort
     Type: int
     Access: rw
     Name: Name
     Type: java.lang.String
     Access: r-
     Name: RMIClientSocketFactory
     Type: java.lang.String
     Access: rw
    +++ Operations:
     void start()
     void jbossInternalLifecycle(java.lang.String java.lang.String)
     void create()
     void stop()
     void destroy()

To invoke an operation on an MBean, use the invoker command:

    [bin]$ ./twiddle.sh -H invoke
    Invoke an operation on an MBean

    usage: invoke [options] <query> <operation> (<arg>)*

    options:
        -q, --query-type[=<type>]    Treat object name as a query
        --                           Stop processing options

    query type:
        f[irst]    Only invoke on the first matching name [default]
        a[ll]      Invoke on all matching names
    [bin]$ ./twiddle.sh invoke jboss:service=JNDIView list true

    <h1>java: Namespace</h1>
    <pre>
      +- XAConnectionFactory (class: org.jboss.mq.SpyXAConnectionFactory)
      +- DefaultDS (class: javax.sql.DataSource)
      +- SecurityProxyFactory (class: org.jboss.security.SubjectSecurityProxyFactory)
      +- DefaultJMSProvider (class: org.jboss.jms.jndi.JNDIProviderAdapter)
      +- comp (class: javax.naming.Context)
      +- JmsXA (class: org.jboss.resource.adapter.jms.JmsConnectionFactoryImpl)
      +- ConnectionFactory (class: org.jboss.mq.SpyConnectionFactory)
      +- jaas (class: javax.naming.Context)
      |   +- JmsXARealm (class: org.jboss.security.plugins.SecurityDomainContext)
      |   +- jbossmq (class: org.jboss.security.plugins.SecurityDomainContext)
      |   +- HsqlDbRealm (class: org.jboss.security.plugins.SecurityDomainContext)
      +- timedCacheFactory (class: javax.naming.Context)
    Failed to lookup: timedCacheFactory, errmsg=null
      +- TransactionPropagationContextExporter (class: org.jboss.tm.TransactionPropagationContextFactory)
      +- StdJMSPool (class: org.jboss.jms.asf.StdServerSessionPoolFactory)
      +- Mail (class: javax.mail.Session)
      +- TransactionPropagationContextImporter (class: org.jboss.tm.TransactionPropagationContextImporter)
      +- TransactionManager (class: org.jboss.tm.TxManager)
    </pre>
    <h1>Global JNDI Namespace</h1>
    <pre>
      +- XAConnectionFactory (class: org.jboss.mq.SpyXAConnectionFactory)
      +- UIL2ConnectionFactory[link -> ConnectionFactory] (class: javax.naming.LinkRef)
      +- UserTransactionSessionFactory (proxy: $Proxy11 implements interface org.jboss.tm.usertx.interfaces.UserTransactionSessionFactory)
      +- HTTPConnectionFactory (class: org.jboss.mq.SpyConnectionFactory)
      +- console (class: org.jnp.interfaces.NamingContext)
      |   +- PluginManager (proxy: $Proxy36 implements interface org.jboss.console.manager.PluginManagerMBean)
      +- UIL2XAConnectionFactory[link -> XAConnectionFactory] (class: javax.naming.LinkRef)
      +- UUIDKeyGeneratorFactory (class: org.jboss.ejb.plugins.keygenerator.uuid.UUIDKeyGeneratorFactory)
      +- HTTPXAConnectionFactory (class: org.jboss.mq.SpyXAConnectionFactory)
      +- topic (class: org.jnp.interfaces.NamingContext)
      |   +- testDurableTopic (class: org.jboss.mq.SpyTopic)
      |   +- testTopic (class: org.jboss.mq.SpyTopic)
      |   +- securedTopic (class: org.jboss.mq.SpyTopic)
      +- queue (class: org.jnp.interfaces.NamingContext)
      |   +- A (class: org.jboss.mq.SpyQueue)
      |   +- testQueue (class: org.jboss.mq.SpyQueue)
      |   +- ex (class: org.jboss.mq.SpyQueue)
      |   +- DLQ (class: org.jboss.mq.SpyQueue)
      |   +- D (class: org.jboss.mq.SpyQueue)
      |   +- C (class: org.jboss.mq.SpyQueue)
      |   +- B (class: org.jboss.mq.SpyQueue)
      +- ConnectionFactory (class: org.jboss.mq.SpyConnectionFactory)
      +- UserTransaction (class: org.jboss.tm.usertx.client.ClientUserTransaction)
      +- jmx (class: org.jnp.interfaces.NamingContext)
      |   +- invoker (class: org.jnp.interfaces.NamingContext)
      |   |   +- RMIAdaptor (proxy: $Proxy35 implements interface org.jboss.jmx.adaptor.rmi.RMIAdaptor,interface org.jboss.jmx.adaptor.rmi.RMIAdaptorExt)
      |   +- rmi (class: org.jnp.interfaces.NamingContext)
      |   |   +- RMIAdaptor[link -> jmx/invoker/RMIAdaptor] (class: javax.naming.LinkRef)
      +- HiLoKeyGeneratorFactory (class: org.jboss.ejb.plugins.keygenerator.hilo.HiLoKeyGeneratorFactory)
      +- UILXAConnectionFactory[link -> XAConnectionFactory] (class: javax.naming.LinkRef)
      +- UILConnectionFactory[link -> ConnectionFactory] (class: javax.naming.LinkRef)

    </pre>